题目:高精度加法
思路:之前做过,不过那个时候思路很复杂,代码写得老长,今天重新做,用了一个新的方法,长度短的补足0,这样的话就不用考虑很多种情况了!还有用string的话要注意插入顺序!
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <string>
#include <map>
#include <vector>
#include <queue>
using namespace std;
int main()
{
int t;
scanf( "%d", &t );
for( int w = 1; w <= t; w++ )
{
string n, m;
string ans;
cin >> n >> m;
cout << "Case " << w << ":" << endl;
cout << n << " + " << m << " = ";
int len1 = n.length();
int len2 = m.length();
if( len1 < len2 )
{
for( int i = 0; i < len2 - len1; i++ )
{
n = "0" + n;
}
}
else
{
for( int i = 0; i < len1-len2; i++ )
{
m = "0" + m;
}
}
//cout << n << ' ' << m << endl;
int carry = 0;
int len = n.length();
for( int i = len - 1; i >= 0; i-- )
{
int tmp = n[i] + m[i] - 2*'0' + carry;
carry = tmp / 10;
ans = char ( tmp%10 + '0' ) + ans;
}
if( carry )
{
ans = '1' + ans;
}
cout << ans << endl;
if( w != t )
{
puts("");
}
}
return 0;
}