有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
88888888888888888888
33333333333333333333
#include<stdio.h>
#include<string.h>
int main()
{
char a[220],b[220];
int i,j,c[220],d[220],e[220],f,g,s,n;
while (scanf("%s",a) != EOF&&scanf("%s",b) != EOF)
{
f = strlen(a); g = strlen(b);
for (j=0,i = f-1; i >=0;i--,j++) //反向存取数据 便于计算
{
c[j] = a[i] - 48;
}
for (j=0,i = g-1; i >=0;i--,j++) //反向存取数据 便于计算
{
d[j] = b[i] - 48;
}
f = f - 1; g = g - 1; //最后一位序号
if (f >= g)
{
c[f + 1] = 0; d[f + 1] = 0;
for (i = g + 1; i <= f;i++)
{
d[i] = 0; //补齐位数
}
for (i = 0; i <= f+1; i++)
{
s = 0;
if (c[i] + d[i] >= 10)
{
s = (c[i] + d[i]) % 10;
e[i] = s;
d[i + 1]++;
}
else
{
s = (c[i] + d[i]) % 10;
e[i] = s;
}
}
}
if (f < g)
{
c[g + 1] = 0; d[g + 1] = 0;
for (i = f + 1; i <= g;i++)
{
c[i] = 0; //补齐位数
}
for (i = 0; i <= g + 1; i++)
{
s = 0;
if (c[i] + d[i] >= 10)
{
s = (c[i] + d[i]) % 10;
e[i] = s;
d[i + 1]++;
}
else
{
s = (c[i] + d[i]) % 10;
e[i] = s;
}
}
}
if (f >= g)
{
if (e[f + 1] == 0)
{
for (i = f; i >= 0;i--)
{
printf("%d",e[i]);
}
printf("n");
}
else
{
for (i = f+1; i >= 0; i--)
{
printf("%d",e[i]);
}
printf("n");
}
}
if (f < g)
{
if (e[g+ 1] == 0)
{
for (i = g; i >= 0; i--)
{
printf("%d",e[i]);
}
printf("n");
}
else
{
for (i = g + 1; i >= 0; i--)
{
printf("%d",e[i]);
}
printf("n");
}
}
}
return 0;
}