两个都是数字的字符串求和

#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';elsei–;/*从高位开始打印*/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;}

爱情不是避难所,想进去避难的话,是会被赶出来的。

两个都是数字的字符串求和

相关文章:

你感兴趣的文章:

标签云: