思路:
1、将A B当作字符串读入。
2、将两个字符串分别倒序。
3、从个位对齐开始进行相加,对是否产生进位进行判断。
4、当两个串长度不等,相加结束后,较长的串剩下的位单独与进位运算。
5、将结果倒序输出。
#include <stdio.h>
int main()
{
// 读取两个字符串
char ta[1002];
char tb[1002];
scanf("%s %s",ta,tb);
// 计算 a b 的长度
int ia = 0;
int ib = 0;
while(ta[ia] != '\0')
ia++;
while(tb[ib] != '\0')
ib++;
// 将 a b 倒序
char a[1002];
char b[1002];
int i = -1;
for(i=0; i<ia; i++)
a[i] = ta[ia-1-i];
for(i=0; i<ib; i++)
b[i] = tb[ib-1-i];
a[ia] = '\0';
b[ib] = '\0';
// 求和
char c[1003];
int ret = 0;
if(ia < ib)
{
for(i=0; i<ia; i++)
{
c[i] = (ret + (a[i]-'0') + (b[i]-'0')) + '0';
ret = (c[i]-'0') / 10;
c[i] = ((c[i]-'0') % 10) + '0';
}
for(; i<ib; i++)
{
c[i] = (ret + (b[i]-'0')) + '0';
ret = (c[i]-'0') / 10;
c[i] = ((c[i]-'0') % 10) + '0';
}
if(ret != 0)
{
c[i] = ret + '0';
i++;
c[i] = '\0';
}
else
c[i] = '\0';
}
else
{
for(i=0; i<ib; i++)
{
c[i] = (ret + (a[i]-'0') + (b[i]-'0')) + '0';
ret = (c[i]-'0') / 10;
c[i] = ((c[i]-'0') % 10) + '0';
}
for(; i<ia; i++)
{
c[i] = (ret + (a[i]-'0')) + '0';
ret = (c[i]-'0') / 10;
c[i] = ((c[i]-'0') % 10) + '0';
}
if(ret != 0)
{
c[i] = ret + '0';
i++;
c[i] = '\0';
}
else
c[i] = '\0';
}
// 将 c 倒序
char r[1003];
if(i != -1)
{
int j;
for(j=0; j<i; j++)
r[j] = c[i-1-j];
r[j] = '\0';
printf("%s\n", r);
}
}