大数加法
Integer Inquiry POJ - 1503
解题思路:我是把所有要求的数据全部输入,定义成二维数组,以0结束以记录有几组数据,然后按列计算每列的答案,通过对每位取整取余进行进位及输出。
-
这题有一个坑,给出的例子最后一行为0,代表输入结束,也就是说,你必须输入0回车之后才能出结果,而不是输入0代表程序整体结束。
-
此题前导0是可以计算的。
-
该代码可以AC,(但不知道为啥)但是只限于给出的字符串位数相同,一旦有一行数据长度不满足,就会存在’\0’的情况,就会造成如图所示情况。但题目存在bug,这样竟然可以AC。
#include<stdio.h>
#include<string.h>
#define INF 0x3f3f3f3f
const int N=110;
char a[N][N];
int b[N];
int main()
{
int i,j,l,k=0;
int maxx=-INF;
for(i=0; ; i++) //因为不知道有多少组数据需要相加
{
scanf("%s",a[i]);
l=strlen(a[i]);
if(l>maxx)
maxx=l;
// if(a[0][0]=='0')
//注意一下,这样写结果是出不来的
if(a[i][0]=='0'&&l==1)
{
break;
//需要放在下面,避免把单独的0那一行算进去
}
k++;//表示输入了几组数据
}
int jinwei=0,c=0;
for(i=maxx-1; i>=0; i--)
{
//倒着计算
int sum=0;
for(j=0; j<=k-1; j++)
{
sum=sum+a[j][i]-'0';
}
sum=sum+jinwei;//需要加上进位,第一次的进位为0
if(sum>=10)
{
jinwei=sum/10;//这个进位留到下一位数字再加
sum=sum%10;//该位取个位数
}
else
jinwei=0;//如果sum不满10的话,无需进位
//需要把jinwei清零
b[c++]=sum;//sum为一位数,存到b数组里面去
//从下标为0开始存//最后倒着输入
if(i==0&&jinwei!=0)
b[c++]=jinwei;
// b[c]=jinwei;
}
for(i=c-1; i>=0; i--)
// for(i=maxx-1;i>=0;i--)
printf("%d",b[i]);
printf("\n");
return 0;
}