http://acm.hdu.edu.cn/showproblem.php?pid=1753
有时间优化一下,写的好长啊!

#include"iostream"
using namespace std;
int main()
{
char a[1001],b[1001];
int c[1001] , d[1001];
int e[1001];
int i,j;
while(cin>>a>>b)
{
int L1=strlen(a);
int L2=strlen(b);
int start_a=L1-1,start_b=L2-1;
for(i=L1-1;i>=0;i--) if(a[i]!='0') { start_a=i; break; } //去除末尾0
for(i=L2-1;i>=0;i--) if(b[i]!='0') { start_b=i; break; }
int s=0,t=0 , _max;
int marka=start_a,markb=start_b;
for( i=0 ; i<=start_a ; ++i )
{
if(a[i]=='.') { marka=i; break; }
}
for(i=0; i<=start_b ; ++i)
{
if(b[i]=='.') { markb=i; break;}
}
if(start_a-marka>start_b-markb) _max=start_a-marka;
else _max=start_b-markb;
if(start_a-marka>start_b-markb)
{
for( i=start_b+1 ; i<=start_b+start_a-marka-start_b+markb ; i++ )
b[i]='0';
for( i=0 ; i<=start_b+start_a-marka-start_b+markb ; ++i )
{
if(b[i]!='.') d[t++]=b[i]-'0';
}
for( i=0 ; i<=start_a ; ++i )
{
if(a[i]!='.') c[s++]=a[i]-'0';
}
}
else
{
for( i=start_a+1 ; i<=start_a+start_b-markb-start_a+marka ; i++)
a[i]='0';
for(i=0; i<=start_b ; ++i)
{
if(b[i]!='.') d[t++]=b[i]-'0';
}
for( i=0 ; i<=start_a+start_b-markb-start_a+marka ; ++i )
{
if(a[i]!='.') c[s++]=a[i]-'0';
}
}
int flag=0 ,m=0;
if(s>t)
{
for(i=s-1,j=t-1;i>=s-t,j>=0;j--,i--)
{
e[m++]=(c[i] + d[j] + flag)%10;
flag=(c[i] + d[j] + flag)/10;
}
for(i=s-t-1;i>=0;i--)
{
e[m++]=(c[i]+flag)%10;
flag=(c[i]+flag)/10;
}
}
else
{
for(i=s-1,j=t-1;i>=0,j>=t-s; j--,i--)
{
e[m++]=(c[i] + d[j] + flag)%10;
flag=(c[i] + d[j] + flag)/10;
}
if(t>s)
{
for(i=t-s-1;i>=0;i--)
{
e[m++]=(d[i]+flag)%10;
flag=(d[i]+flag)/10;
}
}
}
while(flag)
{
e[m++]=flag%10;
flag/=10;
}
int mark=0,count=0;
for(i=0;i<m;i++) if(e[i]==0) count++;
if(count==m) cout<<"0"<<endl;
else
{
for(i=0;i<=_max;i++)
{
if(e[i]) { mark=i ; break; }
else if(i=_max) {mark=_max; break;}
}
for(i=m-1;i>=mark;i--)
{
cout<<e[i];
if(i==_max&&i!=mark) cout<<".";
}
cout<<endl;
}
}
return 0;
}