简单题,但要考虑一些细节:
前导0不要,后导0不要,小数长度不一样时,有进位时,逆置处理输出
然后处理起来就比较麻烦了。
我的代码纯模拟,把小数点前后分开来处理,写的很繁杂,纯当纪念——可怜我的眼睛。
#include<string.h> #include<stdio.h> int i,la,lb,la1,lb1,la2,lb2,lc1,lc2,yi,temp; char a[410],b[410],a1[410],a2[410],b1[410],b2[410],c1[410],c2[410]; void nizhi1(){ int le=la1/2; char c; for(int i=0;i<le;i++){ c=a1[i];a1[i]=a1[la1-1-i];a1[la1-1-i]=c; } } void nizhi2(){ int le=la2/2; char c; for(int i=0;i<le;i++){ c=a2[i]; a2[i]=a2[la2-1-i]; a2[la2-1-i]=c; } } void nizhi3(){ int le=lb1/2; char c; for(int i=0;i<le;i++){ c=b1[i]; b1[i]=b1[lb1-1-i]; b1[lb1-1-i]=c; } } void nizhi4(){ int le=lb2/2; char c; for(int i=0;i<le;i++){ c=b2[i]; b2[i]=b2[lb2-1-i]; b2[lb2-1-i]=c; } } void nizhi5(){ int le=lc1/2; char c; for(int i=0;i<le;i++){ c=c1[i]; c1[i]=c1[lc1-1-i]; c1[lc1-1-i]=c; } } void nizhi6(){ int le=lc2/2; char c; for(int i=0;i<le;i++){ c=c2[i]; c2[i]=c2[lc2-1-i]; c2[lc2-1-i]=c; } } int main() { while(scanf("%s%s",a,b)!=EOF) { memset(a1,0,sizeof(a1)); memset(a2,0,sizeof(a2)); memset(b1,0,sizeof(b1)); memset(b2,0,sizeof(b2)); memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); i=la=lb=la1=lb1=la2=lb2=lc1=lc2=yi=temp=0; la=strlen(a); lb=strlen(b); la1=la2=lb1=lb2=0; for(i=0;i<la;i++) { if(a[i]==‘.‘||a[i]==‘\0‘) break; a1[la1++]=a[i]; } a1[la1]=‘\0‘; nizhi1(); for(i=i+1;i<la;i++) { a2[la2++]=a[i]; } a2[la2]=‘\0‘; nizhi2(); for(i=0;i<lb;i++) { if(b[i]==‘.‘||b[i]==‘\0‘) break; b1[lb1++]=b[i]; } b1[lb1]=‘\0‘; nizhi3(); for(i=i+1;i<lb;i++) { b2[lb2++]=b[i]; } b2[lb2]=‘\0‘; nizhi4(); lc1=0; temp=0; yi=0; if(la2>lb2) { int cha=la2-lb2; for(i=0;i<cha;i++) { if(yi==0&&a2[i]==‘0‘){} else { yi=1; c1[lc1++]=a2[i]; } } for(i=0;i<lb2;i++) { temp=temp+a2[i+cha]+b2[i]-‘0‘-‘0‘; if(temp%10==0&&yi==0){} else { yi=1; c1[lc1++]=temp%10+‘0‘; } temp=temp/10; } } else { int cha=lb2-la2; for(i=0;i<cha;i++) { if(yi==0&&b2[i]==‘0‘){} else { yi=1; c1[lc1++]=b2[i]; } } for(i=0;i<la2;i++) { temp=temp+b2[i+cha]+a2[i]-‘0‘-‘0‘; if(temp%10==0&&yi==0){} else { yi=1; c1[lc1++]=temp%10+‘0‘; } temp=temp/10; } } c1[lc1]=‘\0‘; if(la1>lb1) { for(i=0;i<lb1;i++) { temp=temp+a1[i]+b1[i]-‘0‘-‘0‘; c2[lc2++]=temp%10+‘0‘; temp=temp/10; } for(;i<la1;i++) { temp=temp+a1[i]-‘0‘; c2[lc2++]=temp%10+‘0‘; temp=temp/10; } } else { for(i=0;i<la1;i++) { temp=temp+a1[i]+b1[i]-‘0‘-‘0‘; c2[lc2++]=temp%10+‘0‘; temp=temp/10; } for(;i<lb1;i++) { temp=temp+b1[i]-‘0‘; c2[lc2++]=temp%10+‘0‘; temp=temp/10; } } if(temp!=0) c2[lc2++]=temp+‘0‘; c2[lc2]=‘\0‘; nizhi5(); nizhi6(); yi=0; for(i=0;i<lc2;i++) { if(c2[i]==‘0‘&&yi==0) continue; else { yi=1; printf("%c",c2[i]); } } if(lc1!=0) { printf(".%s",c1); } printf("\n"); } return 0; }
HDU 1753 大明A+B(字符串模拟,简单题),布布扣,bubuko.com
原文:http://www.cnblogs.com/laiba2004/p/3665232.html