1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 5 // x1 + x2 = yy 6 int add_1(char *x1, char *x2, char *yy) 7 { 8 int x1_len, x2_len, x_max, yy_len; 9 int i, j, carry, tt; 10 char *y1; 11 12 x1_len = strlen(x1); 13 x2_len = strlen(x2); 14 15 //printf("x1_len:%d, x2_len:%d ", x1_len, x2_len); 16 17 x_max = x1_len > x2_len ? x1_len : x2_len; 18 // yy_len的最大长度为: x_max+1 19 // yy_len的最小长度为: x_max 20 if((y1 = malloc(sizeof(char) * (x_max + 2))) == NULL) 21 { 22 return 0; 23 } 24 memset(y1, 0x00, x_max + 2); 25 26 carry = 0; 27 yy_len = 0; 28 for(i=x1_len, j=x2_len; i > 0 && j > 0; i--, j--, yy_len++) 29 { 30 tt = (x1[i-1]-'0') + (x2[j-1]-'0') + carry; 31 y1[yy_len] = (tt % 10) + '0'; 32 carry = tt / 10; 33 } 34 for(; i > 0; i--, yy_len++) 35 { 36 tt = (x1[i-1]-'0') + carry; 37 y1[yy_len] = (tt % 10) + '0'; 38 carry = tt / 10; 39 } 40 for(; j > 0; j--, yy_len++) 41 { 42 tt = (x2[j-1]-'0') + carry; 43 y1[yy_len] = (tt % 10) + '0'; 44 carry = tt / 10; 45 } 46 if(carry != 0) 47 { 48 y1[yy_len++] = carry + '0'; 49 } 50 51 //printf("yy_len: %d ", yy_len); 52 53 for(i = 0; i < yy_len; i++) 54 { 55 yy[i] = y1[yy_len-i-1]; 56 } 57 yy[yy_len] = '