#include <stdio.h>
#include <string.h>
int main()
{
char a[100000], b[100000];
int a1[100000], b1[100000], result[100000];
int len, i, j;
while (~scanf("%s%s", a, b))//按位取反,遇到ctrl+z再按回车会结束输入
{
len = strlen(a) > strlen(b) ? strlen(a) : strlen(b);
for (i = 0, j = strlen(a)-1; i < strlen(a); i++, j--)
{
a1[i] = a[j]-'0';//a1存入从个位开始的十进制中的数据,减去'0'是将ASCII码值变为十进制中的数据,
}//注: a1中的第一个数据a1[0]是a[len-1]中个位的数字ASCII值
//因为从个位开始相加,满10进一。
for (i = 0, j = strlen(b)-1; i < strlen(b); i++, j--)
{
b1[i] = b[j]-'0';
}
for (i = 0; i < len; i++)
{
result[i] += a1[i]+b1[i];//将对应的各个位相加
if (result[i] > 9)//满十,则此数组元素-10,并再下一位数据+1,所以上面result是+=(初始化是0),而不是=;
{
result[i] -= 10;
result[i+1] += 1;
}
}
if (result[len] > 0)
{
len++;//因为满十进一,所以数组长度( 长度取的是最长的位数,所以只可能会加一位)
//会往上加,所以判断result[len]是否非零,是,长度+1,因为之后要输出这些长度的数据。
}
for (i = len-1; i >= 0; i--)
{
printf("%d", result[i]);
}
printf("\n");
for (i = 0; i < len; i++)//因为是多组数据的输入输出,所以要变为0,
{//注不能用a[100000] = {0},只能再初始化的时候这样用。
a[i] = 0;//所以此处用循环来清零。
a1[i] = 0;
b[i] = 0;
b1[i] = 0;
result[i] = 0;
}
}
return 0;
}
多组大数相加
最新推荐文章于 2021-05-19 00:08:07 发布