高精度加法
2016-09-25 16:14
183 查看
问题描述
输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。
算法描述
由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。
定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。
计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0],即C[0]等于(A[0]+B[0])%10。然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来,即C[1]应该是A[1]、B[1]和r三个数的和.如果又有进位产生,则仍可将新的进位存入到r中,和的个位存到C[1]中。依此类推,即可求出C的所有位。
最后将C输出即可。
输入格式
输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两
4000
个整数都不超过100位,两数的最高位都不是0。
输出格式
输出一行,表示a + b的值。
样例输入
20100122201001221234567890
2010012220100122
样例输出
20100122203011233454668012
输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。
算法描述
由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。
定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。
计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0],即C[0]等于(A[0]+B[0])%10。然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来,即C[1]应该是A[1]、B[1]和r三个数的和.如果又有进位产生,则仍可将新的进位存入到r中,和的个位存到C[1]中。依此类推,即可求出C的所有位。
最后将C输出即可。
输入格式
输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两
4000
个整数都不超过100位,两数的最高位都不是0。
输出格式
输出一行,表示a + b的值。
样例输入
20100122201001221234567890
2010012220100122
样例输出
20100122203011233454668012
源代码 | 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXa 100 4 #define MAXb 100 5 #define MAXc 101 6 int main() 7 { 8 char a[MAXa]; 9 char b[MAXb]; 10 int c[MAXc]; 11 int la, lb; 12 int i, j; 13 int r = 0; 14 int n = 0; 15 int s;//计算某一位未进位之前的值 16 17 scanf("%s%s", a, b); 18 memset(c,0,sizeof(c)); 19 la = strlen(a); 20 lb = strlen(b); 21 22 for (i = la - 1, j = lb - 1; i >= 0 && j >= 0; i--, j--) 23 { 24 s = (a[i] - '0') + (b[j] - '0') + r; 25 c[n++] = s % 10; 26 r = s / 10; 27 } 28 if (la > lb ) 29 { 30 for (; i >= 0; i--) 31 { 32 s = a[i] - '0' + r; 33 c[n++] = s % 10; 34 r = s / 10; 35 } 36 } 37 else if ((la < lb) && (j >= 0)) 38 { 39 for (; j >= 0; j--) 40 { 41 s = b[j] - '0' + r; 42 c[n++] = s % 10; 43 r = s / 10; 44 } 45 } 46 else 47 { 48 c[n++] = r; 49 } 50 for (i = MAXc - 1; i >= 0; i--) 51 { 52 if (c[i]) 53 { 54 break; 55 } 56 } 57 for (j = i; j >= 0; j--) 58 { 59 printf("%d", c[j]); 60 } 61 printf("\n"); 62 63 return 0; 64 } |
详细记录 |
|
相关文章推荐
- Functions of Protocols and Transmission Speed
- Cmake编译OpenCV源码
- java生成具有一定规则的唯一字符串
- javascript 向上滚动表格
- 第五周项目一(5)解方程(2)
- Node.js V8模块
- 链接器脚本
- Word Ladder
- javascript Tooltips
- 图片无限轮播
- 4 个最好的 Linux 引导程序
- 高逼格的实现WiFi共享,不安装第三方wifi共享软件,两种方式实现开启wifi的功能
- 近期学术目标
- javascript 淘宝右侧小选项卡
- Linux作业8
- 根文件系统制作以及启动kernel panic问题的解决总结
- leetcode——Decode String
- cookie 和session 的区别详解
- 嵌入式编程小知识点
- 矩阵快速幂1242斐波那契数列的第N项