#include <stdio.h> #include <string.h> #include <stdlib.h> void addint(char str1[], char str2[]) { int n1 = strlen(str1); int n2 = strlen(str2); int flag = n1>n2; int n_max = flag?n1:n2; int n_min = flag?n2:n1; int int1[n_max]; int int2[n_max]; if(flag) { memset(int2, 0, sizeof(int2)); //初始化数组置零 }else { memset(int1, 0, sizeof(int1)); } for(int i=0;i<n1;i++) int1[i] = str1[n1-1-i]-'0'; //将字符串转换为整形并倒置顺序 for(int i=0;i<n2;i++) int2[i] = str2[n2-1-i]-'0'; int*result = (int*)malloc(sizeof(int)*(n_max+1)); //n_max+1是为了储存最高位的进位 result[n_max] = 0; //首尾初始化为0 result[0] = 0; for(int i =0;i<n_max;i++) { if(result[i]+int1[i]+int2[i]>=10) //如果有进位 { result[i] = (result[i]+int1[i]+int2[i])%10; //本位对10取余 result[i+1] = 1; //下一位初始化为1表示进位 } else{ result[i] = result[i] + (int1[i]+int2[i]); result[i+1] = 0; //没有进位则下一位初始化为0 } } if(result[n_max]==0) //最高位为0,则从最高位的前一位往前开始输出 { for(int i = n_max-1;i>=0;i--) { printf("%d",result[i]); } }else if(result[n_max] == 1) //最高位为1,则从最高位开始输出 { for(int i = n_max;i>=0;i--) { printf("%d",result[i]); } } } int main() { char str1[10000]; char str2[10000]; while(~scanf("%s",str1)) { scanf("%s",str2); addint(str1,str2); } }