解决大整数相加的算法

算法主要解决的是用户输入的整数过大而溢出造成的问题。解决办法就是将输入的整数字符串转换到整型数组中,加大型的整数装换为一个一个的为数相加,在逐一打印出来。

以下为代码:

 1 #include <stdio.h>
 2 #include<string.h>
 3 #define MAXN 1000
 4 int numberA[MAXN], numberB[MAXN], getResult[MAXN];
 5 char chnumA[MAXN], chnumB[MAXN];
 6 // 得到两个输入整数最大的长度
 7 int getLength()
 8 {
 9     int lenA, lenB;
10     lenA = strlen(chnumA);
11     lenB = strlen(chnumB);
12     if (lenA >= lenB)
13         return lenA;
14     else
15         return lenB;
16 }
17 
18 // 初始化整型数组
19 void init(char *a, int *b)
20 {
21     for (int i = strlen(a) - 1, j = 0; i >= 0; i--, j++)
22     {
23         b[j] = a[i] - '0';
24     }
25 }
26 
27 // 两个整形数组祝逐项相加,将结果付给接收的整形数组
28 int add()
29 {
30     int len = getLength();
31     // 进位数值
32     int tem = 0, i = 0;
33     for (i = 0; i < len; i++)
34     {
35         int sum = numberA[i] + numberB[i] + tem;
36         getResult[i] = sum % 10;
37         tem = sum / 10;
38     }
39     // 如果进位超出了长度范围
40     len = i;
41     while (tem)
42     {
43         getResult[len++] = tem % 10;
44         tem /= 10;
45     }
46     return len;
47 }
48 
49 int main()
50 {
51     int count;
52     printf("请输入要实验的次数:");
53     scanf("%d", &count);
54     for (int i = 0; i < count; i++)
55     {
56         printf("请输入要两个整数:");
57         scanf("%s %s", chnumA, chnumB);
58         init(chnumA, numberA);
59         init(chnumB, numberB);
60         int len = add();
61         printf("%s + %s = ", chnumA, chnumB);
62         for (int i = len - 1; i >= 0; i--)
63         {
64             printf("%d", getResult[i]);
65         }
66         printf("\n");
67     }
68     printf("测试结束");
69 }
原文地址:https://www.cnblogs.com/hanyuan/p/big_int_add.html