#include <stdio.h> #include <string.h> void add(char d1[],char d2[],char sum[]) { int i,j,carry=0,inx,idx1,idx2,t; inx=0; idx1=strlen(d1)-1; idx2=strlen(d2)-1; carry=0; while(idx1>=0&&idx2>=0) { sum[inx++]=(d1[idx1]-‘0‘+d2[idx2]-‘0‘+carry)%10+‘0‘; carry=(d1[idx1]-‘0‘+d2[idx2]-‘0‘+carry)/10; idx1--,idx2--; } while(idx1>=0) { sum[inx++]=(d1[idx1]-‘0‘+carry)%10+‘0‘; carry=(d1[idx1]-‘0‘+carry)/10; idx1--; } while(idx2>=0) { sum[inx++]=(d2[idx2]-‘0‘+carry)%10+‘0‘; carry=(d2[idx2]-‘0‘+carry)/10; idx2--; } while(carry>0) { sum[inx++]=carry%10+‘0‘; carry=carry/10; } sum[inx]=‘\0‘; for(i=0,j=strlen(sum)-1;i<j;i++,j--) { t=sum[i]; sum[i]=sum[j]; sum[j]=t; } int flag=0; for(i=0;i<strlen(sum);i++) { if(sum[i]!=‘0‘) { flag=1;break;} } if(flag==0) strcpy(sum,"0"); } void main() { char sum[1000]={‘\0‘},ch[1000]; char data[1000]; int n; scanf("%d",&n); while(n--) { strcpy(sum,"\0"); while(scanf("%s",ch)!=EOF&&strcmp(ch,"0")!=0) { if(strlen(ch)>0) { if(strlen(sum)==0) { strcpy(sum,ch); } else { strcpy(data,sum); add(data,ch,sum); } } } if(strlen(sum)==0) strcpy(sum,"0"); printf("%s\n",sum); if(n!=0)//注意格式 printf("\n"); } }
杭电1047——大数相加
Posted 栽种绝处的花
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杭电1047——大数相加相关的知识,希望对你有一定的参考价值。
以上是关于杭电1047——大数相加的主要内容,如果未能解决你的问题,请参考以下文章