您的位置:首页 > 编程语言 > C语言/C++

C语言实现的 大数加法

2013-04-25 13:21 736 查看

注意:对于大数的加法,我们要做的是取用字符串来求解。不用整型数组的原因是如果其中一个大数为100000就不好界定其数组长度。代码如下:

CODE:

#include <stdio.h>
#include <string.h>
#define MAX 1000
#define ZEROCHAR -48// 0字符的ASC II值是48

/* 取lengA和lengB中小的那个 */
int MaxLeng(int a, int b)
{
return a>b? a:b;
}

/* 化字符为数字 */
int TransNumber(char c)
{
return c-'0';
}

int main()
{
char a[MAX], b[MAX];
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
while (scanf("%s %s", a, b)!=EOF)
{
int lengA = strlen(a);
int lengB = strlen(b);
printf("lengA = %d\n", lengA);
printf("lengB = %d\n", lengB);

/* 把A和B字符串的顺序逆序排列 */
int i;
for (i = 0; i < (lengA+1)/2; ++i)
{
if (i == lengA-1-i) break;// 排除共奇数位个大数的影响
a[i] = a[i] + a[lengA-1-i];
a[lengA-1-i] = a[i] - a[lengA-1-i];
a[i] = a[i] - a[lengA-1-i];
}
for (i = 0; i < (lengB+1)/2; ++i)
{
if (i == lengB-1-i) break;// 排除共奇数位个大数的影响
b[i] = b[i] + b[lengB-1-i];
b[lengB-1-i] = b[i] - b[lengB-1-i];
b[i] = b[i] - b[lengB-1-i];
}

/* 加运算 */
int maxLeng = MaxLeng(lengA, lengB);
int c;// 表示进位
int psum;
int sum[MAX];
int an, bn;
for (i = 0, c = 0, psum = 0; i <= maxLeng; ++i)
{
an = TransNumber(a[i]); bn = TransNumber(b[i]);
if (an == ZEROCHAR) an = 0;// 排除初始化中0字符的影响;
if (bn == ZEROCHAR) bn = 0;// 排除初始化中0字符的影响;
psum = an + bn + c;
sum[i] = psum%10;
c = psum/10;
}
int sumLeng = (sum[maxLeng]>0? maxLeng+1:maxLeng);// 最后一位若大于0总位数+1

/* 逆序打印sum[] */
for (i = sumLeng - 1; i >= 0; --i)
{
printf("%d", sum[i]);
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: