hdu1753大明A+B

来源:互联网 发布:mac 上qq 上不了网 编辑:程序博客网 时间:2024/04/27 15:45


hdu1753

包含小数点的字符串加法


测试输入:

0.0000001     0.1

1.0    2

100.89      1.13

0.0000000    1.1


输出

0.1000001

1.2

102.02

1.1


#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<cmath>using namespace std;int main(){int i,j,k,m,n,alen,blen;char t,x[210],y[210],a[210],b[210],c[210],d[210];while(scanf("%s%s",x,y)!=EOF){memset(c,0,sizeof(c));memset(d,0,sizeof(d));for(i=0;i<strlen(x);i++){if(x[i]=='.'){t=x[i];x[i]='\0';strcpy(a+1,x);strcpy(c+1,x+i+1);x[i]=t;break;}strcpy(a+1,x);}for(i=0;i<strlen(y);i++){if(y[i]=='.'){t=y[i];y[i]='\0';strcpy(b+1,y);strcpy(d+1,y+i+1);y[i]=t;break;}strcpy(b+1,y);}//printf("%s!\n%s!\n%s!\n%s!\n\n",a+1,c+1,b+1,d+1);//接下来计算 整数部分(a+b) 和小数部分(c+d)////////////////////////////////////////////////c+dc[0]='X';d[0]='X';//使用strlen()计算至'\0'为止.alen=strlen(c)-1;blen=strlen(d)-1;//alen对应 c  blen对应d m=min(alen,blen);n=max(alen,blen);for(i=1;i<=m;i++){y[i]=c[i]-'0'+d[i]-'0';}if(alen>blen)for(i=m+1;i<=n;i++)y[i]=c[i]-'0';elsefor(i=m+1;i<=n;i++)y[i]=d[i]-'0';for(y[0]=0,i=n;i>0;i--){if(y[i]>9){y[i]-=10;y[i-1]++;}}//if(y[0])printf("%d",y[0]);//for(i=1;i<=n;i++)printf("%d",y[i]);printf("\n");//system("pause");k=n;//因为n在下面还会继续使用 ,此处先备份 留作输出用 ///////////////////////////////////////////////////a+ba[0]='X';b[0]='X';//使用strlen()计算至'\0'为止。 alen=strlen(a)-1;blen=strlen(b)-1;m=min(alen,blen);n=max(alen,blen);x[0]='X';for(i=1;i<=n-m;i++)x[i]='0';x[i]='\0';if(alen>blen){strcat(x,b+1);for(i=1;i<=alen;i++)x[i]=a[i]-'0'+x[i]-'0';}else{strcat(x,a+1);for(i=1;i<=blen;i++)x[i]=b[i]-'0'+x[i]-'0';}x[n]+=y[0];//衔接小数部分的结果 for(x[0]=0,i=n;i>0;i--)if(x[i]>9){x[i]-=10;x[i-1]++;}if(x[0]!=0)printf("%d",x[0]);for(i=1;i<=n;i++)printf("%d",x[i]);for(i=k;i>0;i--){//printf("~%c~\n",y[i]);if(y[i]!=0)break;k=i-1;}if(i)printf(".");for(i=1;i<=k;i++)printf("%d",y[i]);printf("\n");}return 0;}