大数相加
先将两串数字字符串逆序,然后按位计算求和,注意进位问题,最后把计算结果字符串逆序!
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 }