题解 | #高精度整数加法#
高精度整数加法
https://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6
//从后往前相加,长的一组继续补位(要注意加到最后一位时是否有进位)
#include <stdio.h>
#include<string.h>
int main()
{
char arr1[10000], arr2[10000];
gets(arr1);
gets(arr2);
int sz1 = strlen(arr1), sz2 = strlen(arr2), i = 1, j = 1, num = 0, max, min, p[10000] = { 0 };
max = sz1 > sz2 ? sz1 : sz2;
min = sz1 > sz2 ? sz2 : sz1;
if (arr1[0] == '0')
{
printf("%s\n", arr2);
return 0;
}
if (arr2[0] == '0')
{
printf("%s\n", arr1);
return 0;
}
while (i <= min)
{
p[max - i + 1] = ((arr1[sz1 - i] + arr2[sz2 - i] - 96) % 10 + num) % 10;
if (((arr1[sz1 - i] + arr2[sz2 - i] - 96) % 10 + num) == 10)
{
num = 1;
i++;
continue;
}
num = (arr1[sz1 - i] + arr2[sz2 - i] - 96) / 10;
i++;
}
if (num&&sz1==sz2)
{
p[0] = 1;
goto print;
}
while (i <= max)
{
if (sz1 > sz2)
{
p[max - i + 1] = (arr1[sz1 - i] - 48 + num) % 10;
num = (arr1[sz1 - i] - 48 + num) / 10;
}
else if (sz2 > sz1)
{
p[max - i + 1] = (arr2[sz2 - i] - 48 + num) % 10;
num = (arr2[sz2 - i] - 48 + num) / 10;
}
i++;
}
print:
if (p[0] == 1)
{
i = 0;
}
else
{
i = 1;
}
while (i <= max)
{
printf("%d", p[i]);
i++;
}
return 0;
}
查看8道真题和解析