两个都是数目字的字符串求和
两个都是数字的字符串求和
#include <stdio.h> #include <string.h> #include <stdlib.h> void add(char *a, char *b) { char *ret,*array_a,*array_b; int lena,lenb,len_small,len_big,i,tmp = 0;/*tmp表示是否有进位*/ if(a == NULL || b == NULL) return; lena = strlen(a); lenb = strlen(b); len_small = (lena > lenb) ? lenb:lena; len_big = (lena < lenb) ? lenb:lena; if ((array_a = malloc(lena)) == NULL) goto out; for(i = 0; i < lena; i++) { array_a[lena - i - 1] = a[i] - '0'; } if ((array_b = malloc(lenb)) == NULL) goto out; for(i = 0; i < lenb; i++) { array_b[lenb - i - 1] = b[i] - '0'; } ret = malloc(len_big + 1); if(ret == NULL) goto out; /*把低位相加*/ for(i = 0; i < len_small; i++) { tmp += array_a[i] + array_b[i]; ret[i] = (tmp % 10) + '0'; tmp = tmp / 10; } /*如果有高位的话,在把高位相加*/ if(lena > lenb) { for(i; i < len_big; i++) { tmp += array_a[i]; ret[i] = (tmp % 10) + '0'; tmp = tmp / 10; } } else { for(i; i < len_big; i++) { tmp += array_b[i]; ret[i] = (tmp % 10) + '0'; tmp = tmp / 10; } } if(tmp)/*如果最后有进位*/ ret[i] = tmp + '0'; else i--; /*从高位开始打印*/ for(i; i >= 0 ; i--) { printf("%c",ret[i]); } printf("\n"); out: if (array_a) free(array_a); if(array_b) free(array_b); if(ret) free(ret); } int main(int argc, char *argv[]) { char *a = "55552342423535345"; char *b = "55555"; add(a ,b); return 0; }