您的位置:首页 > 其它

大数加法A+B

2016-04-14 21:46 344 查看
思路:

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  大数相加