閱讀826 返回首頁    go 阿裏雲 go 技術社區[雲棲]


poj 2562 Primary Arithmetic

這道題太陰險了。。居然還有單複數。。。

1的時候和多個的時候不一樣。。。。。。。


題意:給你兩個數,問如果有兩個數用筆算相加,有多少次進位。

 

思路:簡單模擬。但情況要考慮全,而且注意單複數的輸出形式不同。可能WA的數據有:

      0 5

      999999 8

      901 99


#include <stdio.h>
#include <string.h>

char a[15],b[15];
int aInt[15],bInt[15];

void inverse()
{
	int i;
	//轉a
	for(i=0;i<strlen(a);i++)
		aInt[strlen(a)-1-i]=a[i]-48;

	//轉b
	for(i=0;i<strlen(b);i++)
		bInt[strlen(b)-1-i]=b[i]-48;

	//test
	/*for(i=0;i<strlen(a);i++)
		printf("%d ",aInt[i]);
	printf("\n");

	for(i=0;i<strlen(b);i++)
		printf("%d ",bInt[i]);
	printf("\n");*/
}

int main()
{
	int i;
	int count;
	while(scanf("%s%s",&a,&b))
	{
		if(strcmp(a,"0")==0 && strcmp(b,"0")==0)
			break;

		//init
		count=0;
		memset(aInt,0,sizeof(aInt));
		memset(bInt,0,sizeof(bInt));

		//將a[],b[]中的數轉為int型,且低位在1位
		inverse();

		for(i=0;i<=strlen(a) || i<=strlen(b);i++)
			if(aInt[i]+bInt[i]>=10)
			{
				count++;
				aInt[i+1]++;
			}

		if(count==0)
			printf("No carry operation.\n");
		else if(count==1)
			printf("1 carry operation.\n");
		else
			printf("%d carry operations.\n",count);
	}

	return 0;
}




最後更新:2017-04-03 05:40:03

  上一篇:go ping不通
  下一篇:go 集成百度語音sdk到智能家居平台中