题解 | 高精度整数加法
高精度整数加法
https://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
char str1[10000];
char str2[10000];
while (scanf("%s %s", str1, str2) != EOF) {
int len1 = strlen(str1);
int len2 = strlen(str2);
int num1[len1+1]; //给首位满十进一预留
int num2[len2+1]; //给首位满十进一预留
int num3[10001]; //用来存储相加后每一项的数组
int num4[10001]; //用来将长度较短数组增加数组前面为0的个数,使得长度与较长数组一致,好计算num3数组
int i,j;
int a = 0;
for(i=0;i<=len1;i++)
{
if(i == 0)
num1[i] = 0; //数组第一位赋值为0
else
num1[i] = str1[i-1] - '0'; //数组第二位至最后一位是str1数组中的每一项
}
for(i=0;i<=len2;i++)
{
if(i == 0)
num2[i] = 0;
else
num2[i] = str2[i-1] - '0'; //数组第二位至最后一位是str2数组中的每一项
}
if(len1>=len2)
{
for(i=len1;i>=0;i--)
{
if(i>=len1-len2 && i<=len1) num4[i] = num2[i-len1+len2]; //num2复制给num4的从len1-len2到len1项
if(i>=0 && i<len1-len2) num4[i] = 0; //num4从0到len1-len2-1项全部赋值0
num3[i] = num1[i] + num4[i] + a; //a 存在是为了满十进一
if(num3[i] > 9 )
{
num3[i] = num3[i] - 10; //满十进一后的值
a = 1;
}
else a = 0;
}
for(i=0;i<1;i++)
{
if(num3[i] != 0)
printf("%d",num3[i]); //num3首位非零就全部输出
else break;
}
for(i=1;i<=len1;i++)
{
printf("%d",num3[i]); //num3首位为零就将去掉首位,输出其他
}
}
if(len1<len2)
{
for(i=len2;i>=0;i--)
{
if(i>=len2-len1 && i<=len2) num4[i] = num1[i-len2+len1]; //num1复制给num4的从len2-len1到len2项
if(i>=0 && i<len2-len1) num4[i] = 0; //num4从0到len2-len1-1项全部赋值0
num3[i] = num2[i] + num4[i] + a;
if(num3[i] > 9 )
{
num3[i] = num3[i] - 10;
a = 1;
}
else a = 0;
}
for(i=0;i<1;i++)
{
if(num3[i] != 0)
printf("%d",num3[i]);
else break;
}
for(i=1;i<=len2;i++)
{
printf("%d",num3[i]);
}
}
}
return 0;
}

