大数相加

先将两串数字字符串逆序,然后按位计算求和,注意进位问题,最后把计算结果字符串逆序!

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 //字符串翻转
 6 void reverse(char *str)
 7 {
 8     char tmp;
 9     char *p0= str ,*p = str;
10     while(*p != '\0')
11         p++;
12     p--;
13     while(p0 < p)
14     {
15         tmp = *p0;
16         *p0 = *p;
17         *p = tmp;
18         p0++, p--;
19     }
20 }
21 
22 
23 char *Add_Num(char *a, char *b)
24 {
25     int len0 = strlen(a);
26     int len1 = strlen(b);
27     int m, n, in = 0; 
28     int max = len0 > len1 ? len0 : len1; 
29     char *c = (char *)malloc(sizeof(char)*(max+2));
30     int i = 0, j = 0;
31     memset(c, 0, max+2);//清空数组C
32     reverse(a);//翻转数组
33     reverse(b);
34     
35     for(i = 0; i < max ;i++)
36     {
37         if(*(a+i) != '\0' && i < len0)
38             m = a[i] - '0';
39         else
40             m = 0;
41         if(*(b+i) != '\0' && i < len1)
42             n = b[i] - '0';
43         else
44             n = 0;
45 
46         c[j++] = (m + n + in) % 10 + '0';
47         in  = (m + n + in) / 10;
48     }
49     if(in)
50         c[j] = in + '0';
51     
52     reverse(c);
53     return c;
54 }
55 int main()
56 {
57     char a[] = "333333333333333333333333333333333";
58     char b[] = "1133333333333333333333333333333333";
59     int i;
60     char *c = Add_Num(a, b);
61     printf("%s\n", c);
62 
63     return 0;
64 }

 

posted @ 2013-08-15 22:43  夕相待  阅读(316)  评论(0编辑  收藏  举报