#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char* ladd(char* s1, char* s2)
{
int n1, n2, n, i;
char* result, c = 0;
n1 = strlen(s1);//计算两个超大数字串长度
n2 = strlen(s2);
n = n1 > n2 ? n1 : n2;//找出两个超大数中最大数字串的长度
result = (char*)malloc(n + 2);
for (i = n + 1; i >= 0; i--)//将s1从低位开始搬到result,没有数字的位以及最高位填'0'
result[i] = i > n - n1 ? *(s1 + i - n +n1 - 1) : '0';
for (i = n; i >= 0; i--)//将字符转化为数字,并且s1,s2对应相加,c为进位补充
{
char tchar;
tchar = i > n - n2 ? result[i] - '0' + s2[i - n + n2 - 1] - '0' + c : result[i] - '0' + c;
c = tchar > 9 ? 1 : 0;//进位判定
result[i] = c == 1 ? tchar - 10 + '0' : tchar + '0';//赋值
}
return result;
}
int main()
{
char num1[100], num2[100], * num;
scanf("%s %s", num1, num2);
num = ladd(num1, num2);
printf("%s+%s=%s\n", num1, num2, num);
free(num);//释放空间
return 0;
}
江苏大学2019年电子信息专业研究生考试程序说明题第三题