http://acm.hdu.edu.cn/showproblem.php?pid=1753
先将小数的两部分分开,(要考虑到只有整数部分的情况)再分别计算使用addd函数壁一般的字符串大数加法多了一个参数,这个参数可以判断是在给整数部分想加,还是在给小数部分相加,因为小数部分相加的时候,要把位数在后面加“0”保证两个小数部分的位书相同,然后再加,还要考虑小数部分的进位情况,最后输出的时候要把小数部分的“0”去掉.....
#include <iostream>
#include <cstring>
using namespace std;
int max(int a,int b)
{
return (a,b)?a:b;
}
string addd(string a,string b,int n)
{
string A="0";
A+=a;
if(A.length()<b.length()&&n)
A.swap(b);
for ( int i=1;i<=A.length();i++)
if(i<=b.length())
for( int i=0;i<A.length();i++)
{
if(A[A.length()-i]>'9')
{
A[A.length()-i]-=10;
A[A.length()-i-1]+=1;
}
}
while(A[0]=='0')
{
A.erase(0,1);
break;
}
return A;
}
void add(string a,string b)
{
int l=0,la=0,lb=0,ib=0,ia=0,flaga=1,flagb=1,fa=0,fb=0;
string s="0",t="0",na="0",nb="0",xa="0",xb="0";
int lena=a.length(),lenb=b.length();
for(int i=0;i<a.length();i++)
{
if(a[i]=='.')
{
fa=1;
break;
}
}
if(!fa)
{
na=a;
xa="0";
}
else
{
for(int i=0;i<a.length();i++)
{
if(a[i]=='.')
{
la=i;
flaga=0;
}
if(flaga)
na+=a[i];
if(!flaga)
xa+=a[i];
}
na.erase(0,1);
xa.erase(xa.begin(),xa.begin()+2);
}
for(int i=0;i<b.length();i++)
{
if(b[i]=='.')
{
fb=1;
break;
}
}
if(!fb)
{
nb=b;
xb="0";
}
else
{
for(int i=0;i<b.length();i++)
{
if(b[i]=='.')
{
lb=i;
flagb=0;
}
if(flagb)
nb+=b[i];
if(!flagb)
}
nb.erase(0,1);
xb.erase(xb.begin(),xb.begin()+2);
}
while(na!="0")
{
if(na[0]=='0')
na.erase(na.begin());
else
break;
}
while(nb!="0")
{
if(nb[0]=='0')
nb.erase(nb.begin());
else
break;
}
ia=a.length()-la-1;
ib=b.length()-lb-1;
if(!la&&!lb)
t="0";
else if(!la&&lb)
{
for(int i=0;xa.length()!=xb.length();i++)
xa+='0';
t=addd(xa,xb,0);
}
else if(la&&!lb)
{
for(int i=0;xa.length()!=xb.length();i++)
xb+='0';
t=addd(xa,xb,0);
}
else if(ib>ia)
{
for(int i=0;i<(ib-ia);i++)
xa+='0';
t=addd(xa,xb,0);
}
else
{
for(int i=0;i<(ia-ib);i++)
xb+='0';
t=addd(xa,xb,0);
}
s=addd(na,nb,1);
if(t.length()>max(xa.length(),xb.length())&&la&&lb)
{
s=addd(s,"1",1);
t.erase(t.begin());
}
cout<<s;
if(t.length()!=0)
{
for(int i=(t.length()-1);t.length()+1;i--)
{
if(t[i]=='0')
t.erase(t.end()-1);
else
break;
}
}
if(t.length()!=0)
cout<<'.'<<t;
cout<<endl;
}
int main ()
{
string a,b;
while(cin>>a>>b)
{
add(a,b);
}
return 0;
}