基础练习 高精度加法

Posted 新生代黑马

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础练习 高精度加法相关的知识,希望对你有一定的参考价值。

问题描述
  输入两个整数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 }

 

以上是关于基础练习 高精度加法的主要内容,如果未能解决你的问题,请参考以下文章

基础练习 高精度加法

蓝桥杯基础练习 高精度加法

[蓝桥杯][基础练习VIP]高精度加法

基础练习 高精度加法

基础练习 | 阶乘

Java蓝桥杯基础练习