-
题目描述:
-
实现一个加法器,使其能够输出a+b的值。
-
输入:
-
输入包括两个数a和b,其中a和b的位数不超过1000位。
-
输出:
-
可能有多组测试数据,对于每组数据,
输出a+b的值。
-
样例输入:
-
2 6 10000000000000000000 10000000000000000000000000000000
-
样例输出:
-
8 10000000000010000000000000000000
-
错误原因:
-
这次输入的时候退出while循环的条件改成了scanf ()!=0,结果就出现了Output Limit Exceeded,改成scanf ()!=EOF就对了,原因未知...如果有知道的看到的话请指教啊!
总结一下吧:
1."scanf ()!=EOF" 和 "gets()!=NULL"是ACM中常用的循环条件。
2.这道大数加减是比较简单的,九度-1003就复杂一点了。
代码:
# include <stdio.h>
# include <string.h>
int main ()
{
char a[1002],b[1002];
int rs[1002],la,lb,i,j,k,c;
while (scanf ("%s%s",a,b)!=EOF)
{
la=strlen(a);
lb=strlen(b);
i=la-1;
j=lb-1;
c=0;
k=0;
while (i>=0&&j>=0)
{
rs[k]=(a[i]+b[j]-96+c)%10;
c=(a[i]+b[j]-96+c)/10;
i--;
j--;
k++;
}
if (i>=0)
while (i>=0)
{
rs[k]=(a[i]-48+c)%10;
c=(a[i]-48+c)/10;
k++;
i--;
}
if (j>=0)
while (j>=0)
{
rs[k]=(b[j]-48+c)%10;
c=(b[j]-48+c)/10;
k++;
j--;
}
if (c!=0)
rs[k++]=c;
for (i=k-1;i>=0;i--)
printf ("%d",rs[i]);
printf ("\n");
}
return 0;
}