hdu1753(a+b)

http://acm.hdu.edu.cn/showproblem.php?pid=1753

有时间优化一下,写的好长啊!

View Code
#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;
}
原文地址:https://www.cnblogs.com/FCWORLD/p/2040571.html