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; }
相关文章推荐
- 高精度处理大数加法C语言实现
- JAVA实现大数加法
- Java链栈实现两个大数加法
- 大数加法、减法、乘法、除法实现
- 大数的加法,乘法,全排列实现
- 剑指offer之面试题12 大数相加 实现任意两个整数的加法
- vector、string实现大数加法乘法
- C语言通过逻辑运算(与或非)实现加法
- 发个小程序玩,实现任意长度十进制整数加法。传说中的什么复试C语言题
- 十字链表实现矩阵加法(C语言实现)
- C语言实现大数整数乘法
- JAVA实现大数加法
- c语言大数加法
- 大数加法.重载实现
- C语言大数加法
- 大数的阶乘(C语言实现)
- C语言中嵌入汇编语言实现简单的加法
- C++实现大数的加法
- 单链表实现大数加法、大数减法、大数乘法、大数指数运算
- C语言中如何实现大数计算