HDOJ 1002 A + B II

题目:高精度加法

思路:之前做过,不过那个时候思路很复杂,代码写得老长,今天重新做,用了一个新的方法,长度短的补足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;
}


猜你喜欢

转载自blog.csdn.net/u011564456/article/details/25662063