1.1 2.9 1.1111111111 2.3444323343 1 1.1
4 3.4555434454
2.1
#include<iostream> using namespace std; void shuchu(char *a,int m1,int t1,int t2) {int i; for(i=799;i>=0;i--) if(i!=m1) if(a[i]>‘9‘&&i!=0) { if(i==m1+1) {a[i]=a[i]-10; a[i-2]++;} else { a[i]=a[i]-10; a[i-1]++; } } if(a[i]>‘9‘&&i==0) {a[i]-=10;cout<<1;} for(i=0;i<t1||i<t2;i++) { if(i==m1) cout<<‘.‘; else cout<<a[i]; } } int main() { char a[800],b[800]; int t1,t2,m1,m2,n=0,i,i1,k1,k2; while (cin>>a>>b) { t1=strlen(a); t2=strlen(b); for(i=t1;i<800;i++) if((a[i]<‘0‘||a[i]>‘9‘)&&a[i]!=‘.‘) a[i]=NULL; for(i=t2;i<800;i++) if((b[i]<‘0‘||b[i]>‘9‘)&&b[i]!=‘.‘) b[i]=NULL; m1=0; m2=0; for(i=0;i<t1;i++) { if(a[i]==‘.‘) { m1=i; break; } } for(i=0;i<t2;i++) { if(b[i]==‘.‘) { m2=i; break; } } k1=m1; k2=m2; if(m1>=m2&&m2!=0) { for(k1--,k2--;k1>=0&&k2>=0;k1--,k2--) a[k1]=a[k1]+b[k2]-48; k1=m1; k2=m2; for(k1++,k2++;k1<t1||k2<t2;k1++,k2++) a[k1]=a[k1]+b[k2]-48; shuchu(a,m1, t1, t2); } if(m2>m1&&m1!=0) { for(k1--,k2--;k1>=0&&k2>=0;k1--,k2--) b[k2]=a[k1]+b[k2]-48; k1=m1; k2=m2; for(k1++,k2++;k1<t1||k2<t2;k1++,k2++) b[k2]=a[k1]+b[k2]-48; shuchu(b,m2, t1, t2); } if(m1==0&&m2!=0) if(t1<=m2) { for(t1--,k2--;t1>=0;t1--,k2--) b[k2]=b[k2]+a[t1]-48; for(i=799;i>=0;i--) shuchu(b,m2, t1, t2); } else {k1=t1; for(k1--,k2--;k2>=0;k1--,k2--) a[k1]=b[k2]+a[k1]-48; k1=t1; k2=m2; for(;k1<800;k1++,k2++) a[k1]=b[k2]; for(i=799;i>=0;i--) shuchu(a,m1, t1, t2); } if(m2==0&&m1!=0) if(t2<=m1) { for(t2--,k1--;t2>=0;t2--,k1--) a[k1]=b[t1]+a[k1]-48;////////////////////////////// for(i=799;i>=0;i--) shuchu(a,m1, t1, t2); } else {k2=t2; for(k1--,k2--;k2>=0;k1--,k2--) b[k2]=a[k1]+b[k2]-48; k2=t2; k1=m1; for(;k2<800;k2++,k1++) b[k2]=a[k1]; for(i=799;i>=0;i--) shuchu(b,m2, t1, t2); } if(m1==m2&&m2==0) { if(t1>t2) { m1=t1;m2=t2; for(m1--,m2--;m2>=0;m1--,m2--) a[m1]=a[m1]+b[m2]-48; for(i=799;i>=0;i--) {if(a[i]>‘9‘&&i!=0) {a[i]=a[i]-10;a[i-1]++;} if(a[i]>‘9‘&&i==0) {a[i]=a[i]-10;cout<<1;}} for(i=0;i<t1;i++) cout<<a[i]; } if(t2>=t1) { m2=t2;m1=t1; for(m1--,m2--;m1>=0;m1--,m2--) b[m2]=a[m1]+b[m2]-48; for(i=799;i>=0;i--) {if(b[i]>‘9‘&&i!=0) {b[i]=b[i]-10;b[i-1]++;} if(b[i]>‘9‘&&i==0) {b[i]=b[i]-10;cout<<1;} } for(i=0;i<t2;i++) cout<<b[i]; } } } return 0; }
任意长度的正小数的加法(YT新人之巅峰大决战05),布布扣,bubuko.com
原文:http://blog.csdn.net/rememberautumn/article/details/20844065