hdu1753(a+b)

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

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

15103836_dbNW.gif 15103836_cPN8.gif 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://my.oschina.net/garyun/blog/602955

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值