我是这样想的:
把每个字符串的长度存起来,并且比出最大的。
然后分别从字符串末尾加起,好比从数字中的低位加起,当然中间需要加判断,某个字符串已经读完。
num[100]放的是加起来后的后面max长度部分的数据,在num[100][0]中放不下的,存入start中,输出时只要判断,若>0,则输出,否则不用输出。
#include<stdio.h> #include<string.h> int main() { int len[100],line,start,max,i,k,temp; char num[101][101]; while(scanf("%s",num[0])!=EOF) { len[0]=strlen(num[0]); max=len[0]; for(i=1;;i++) { scanf("%s",num[i]); if(strcmp(num[i],"0")==0) break; len[i]=strlen(num[i]); max=max<len[i]?len[i]:max; } line=i; start=0; for(i=1;i<=max;i++) { temp=0; for(k=0;k<line;k++) if(len[k]-i>=0) temp+=num[k][len[k]-i]-'0'; num[100][max-i]=(temp+=start)%10+'0'; start=temp/10; } num[100][max]='/0'; if(start) printf("%d",start); printf("%s/n",num[100]); } return 0; }