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

两个大数相加

时间:2015-04-14 16:27:32      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

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

 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:\n");
24     scanf("%s",a);
25     printf("Enter the second number:\n");
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:\n");
82     for(i = num3-1; i >= 0; i--)
83         printf("%c",temp[i]);
84     printf("\n");
85 
86     return 0;
87 }

 

运行结果:

技术分享

两个大数相加

标签:

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

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