两个大数相加

通过字符串数组实现两个大数相加

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 
 5 //大数的最大位数
 6 #define MAX 100
 7 
 8 //和的最大位数
 9 #define N 101
10 
11 int main(int argc,char *argv[])
12 {
13     int i;//工作指针
14     int num1, num2, num3;//记录a,b两数的位数以及 两数相加后的和的位数
15     int c = 0;//记录进位
16     int sum;//记录某位相加的和
17 
18     char temp[N];//记录相加的和
19     //为两数动态分配内存
20     char *a = (char*)malloc(MAX*sizeof(char));
21     char *b = (char*)malloc(MAX*sizeof(char));
22 
23     printf("Enter the first number:
");
24     scanf("%s",a);
25     printf("Enter the second number:
");
26     scanf("%s",b);
27 
28     num1 = strlen(a);
29     num2 = strlen(b);
30 
31     //a记录位数较高的数
32     if(num1 < num2)
33     {
34         char *p;
35         int temp;
36         p = a;
37         a = b;
38         b = p;
39 
40         temp = num1;
41         num1 = num2;
42         num2 = temp;
43     }
44     num3 = num1;//记录较大的位数
45 
46     //相加
47     for(i = 0; i < num1; i++)
48     {
49         //工作指针小于较小的位数
50         if(i < num2)
51         {
52             //记录相加的和
53             sum = a[num1-i-1]-'0' + b[num2-i-1]-'0' + c;
54             if(sum >= 10)//和大于10
55             {
56                 c = 1;
57                 temp[i] = (char)((int)('0') + sum - 10);
58             }
59             else//和小于10
60             {
61                 c = 0;
62                 temp[i] = (char)((int)('0') + sum);
63             }
64         }
65         else{ //i >= num2
66             sum = a[num1-i-1] - '0' + c;
67             if(sum >= 10)
68             {
69                 if(i == (num1 - 1))
70                     num3++;
71                 c = 1;
72                 temp[i] = (char)((int)('0') + sum - 10);
73             }else{
74                 c = 0;
75                 temp[i] = (char)((int)('0') + sum);
76             }
77         }
78     }
79 
80     //逆向打印两数的和
81     printf("The sum is:
");
82     for(i = num3-1; i >= 0; i--)
83         printf("%c",temp[i]);
84     printf("
");
85 
86     return 0;
87 }

运行结果:

原文地址:https://www.cnblogs.com/cpsmile/p/4425073.html