hdu1753(a+b)
2016-01-15 00:00
267 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1753
有时间优化一下,写的好长啊!
![](http://static.oschina.net/uploads/img/201601/15103836_dbNW.gif)
![](http://static.oschina.net/uploads/img/201601/15103836_cPN8.gif)
View Code
有时间优化一下,写的好长啊!
![](http://static.oschina.net/uploads/img/201601/15103836_dbNW.gif)
![](http://static.oschina.net/uploads/img/201601/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 ; }