码迷,mamicode.com
首页 > 其他好文 > 详细

基础练习 高精度加法

时间:2016-05-21 14:27:05      阅读:275      评论:0      收藏:0      [点我收藏+]

标签:

问题描述
  输入两个整数ab,输出这两个整数的和。ab都不超过100位。
算法描述
  由于ab都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。
  定义一个数组AA[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。两个整数都不超过100位,两数的最高位都不是0。
输出格式
  输出一行,表示b的值。
样例输入
20100122201001221234567890
2010012220100122

样例输出

20100122203011233454668012

锦囊1

数组。

锦囊2

使用数组来保存一个整数,按手算的方法处理。

测试代码

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int a[401], alen, b[401], blen, c[400], clen;
 5 char st[400];
 6 int main()
 7 {
 8     int i;
 9     scanf("%s", st);
10     alen = strlen(st);
11     for (i = 1; i <= alen; i++)
12     {
13         a[i] = st[alen - i] - 48;
14     }
15     scanf("%s", st);
16     blen = strlen(st);
17     for (i = 1; i <= blen; i++)
18     {
19         b[i] = st[blen - i] - 48;
20     }
21     clen = alen > blen ? alen : blen;
22     for (i = 1; i <= clen; i++)
23     {
24         c[i] = a[i] + b[i];
25     }
26     for (i = 1; i <= clen; i++)
27     {
28         if (c[i] >= 10)
29         {
30             c[i + 1] = c[i + 1] + c[i] / 10;
31             c[i] = c[i] % 10;
32         }
33     }
34     if (c[clen + 1] > 0)
35     {
36         clen++;
37     }
38     for (i = clen; i >= 1; i--)
39     {
40         printf("%d", c[i]);
41     }
42     printf("\n");
43     return 0;
44 }

 

基础练习 高精度加法

标签:

原文地址:http://www.cnblogs.com/maxin/p/5514631.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!