#include <stdio.h> #include <string.h> #define MAXN 100+5 #define MAXL 100+5 char addend[MAXN][MAXL];//保存加数 char ans[MAXL];//保存结果 int len[MAXN];//保存每个加数的长度 int main(){ int cnt=0;//加数的个数 int max=0;//最长的加数的长度 int i,k,j=MAXL-1,sum,carry; //freopen("data","r",stdin); while(scanf("%s",addend[cnt])&&addend[cnt][0]!='0'){ len[cnt]=strlen(addend[cnt]); max=max>len[cnt]?max:len[cnt]; cnt++; } ans[j--]='\0'; carry=0; for(i=0;i<max;i++){//从最低位开始对每个加数的对应位相加 sum=carry; for(k=0;k<cnt;k++) if(len[k]-i>0)//保证所加位在该加数的长度内 sum+=addend[k][len[k]-i-1]-'0'; ans[j--]=sum%10+'0';//确定结果的对应位 carry=sum/10; } while(carry){//将最后的进位,注意也许并非一位数,依次放入结果中 ans[j--]=carry%10+'0'; carry/=10; } printf("%s\n",ans+j+1); return 0; }
Integer Inquiry UVA 424
时间: 2024-11-05 18:39:31