标签:
这道题是大数相加问题,不算难,也没那么简单,要仔细。
想到两种办法,第一种是使用交换区,另一种不使用交换区,更节省空间。
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 6 int main(void) 7 { 8 char s1[1010], s2[1010]; 9 int a[1010], b[1010]; 10 int i, j, N, m, icase = 0; 11 12 scanf("%d", &N); 13 m = N; 14 while(m--) 15 { 16 memset(s1, 0, 1010*sizeof(char)); 17 memset(s2, 0, 1010*sizeof(char)); 18 memset(a, 0, 1010*sizeof(int)); 19 memset(b, 0, 1010*sizeof(int)); 20 scanf("%s", s1); 21 scanf("%s", s2); 22 int alen = strlen(s1); 23 int blen = strlen(s2); 24 int c; 25 int len = 0; //和值的实际长度 26 27 c = 0; 28 for(i = alen - 1; i > -1; i--) 29 a[c++] = s1[i] - ‘0‘; 30 c = 0; 31 for(i = blen - 1; i > -1; i--) 32 b[c++] = s2[i] - ‘0‘; 33 34 for(i = 0; i < alen; i++) { //这里是alen>blen的情形 35 a[i] += b[i]; 36 len = i; 37 if(a[i] > 9) { 38 a[i + 1] += a[i] / 10; 39 a[i] = a[i] % 10; 40 len = i+1; 41 } 42 } 43 if(alen < blen) { //这里是alen<blen的情形 44 for(i = alen; i < blen; i++) { 45 a[i] += b[i]; 46 len = i; 47 if(a[i] > 9) { 48 a[i + 1] += a[i] / 10; 49 a[i] = a[i] % 10; 50 len = i + 1; 51 } 52 } 53 } 54 55 56 printf("Case %d:\n", ++icase); 57 printf("%s + %s = ", s1, s2); 58 59 for(j = len; j > -1; j--) 60 printf("%d", a[j]); 61 62 printf("\n"); 63 if(icase != N) 64 printf("\n"); 65 66 67 } 68 return 0; 69 }
标签:
原文地址:http://www.cnblogs.com/mylinuxer/p/4325466.html