华为机试题:大数求和

描述: 

给定两个非常大的正整数A和B,位数在50至100之间。求C=A+B;

 
题目类别:  字符串 
难度:  中级 
运行时间限制: 10Sec
内存限制: 128MByte
阶段:  入职前练习 
输入:  

因为A和B很大,从高位到低位,以字符串的形式输入两行数字A和B。A和B的位数在50至100之间。

 
输出:  

以字符串形式,输出一行,表示A和B的和。

 
样例输入:
11111111111111111111111111111111111111111111111111
22222222222222222222222222222222222222222222222222
                   
样例输出:
33333333333333333333333333333333333333333333333333
                   

#include 
#include 
#include 
#include 

using namespace std;

int main()
{
    string A ,B,sum;
    int lensA = 0, lensB = 0;
    string add = "0123456789";
    int i = 0, j = 0;
    int flow = 0; //溢出标识
    int bit = 0;

    cin >> A >> B;

    /*将两个字符串翻转*/
    reverse(A.begin(),A.end());
    reverse(B.begin(),B.end());

    lensA = A.size();
    lensB = B.size();

    for(; i < lensA || j < lensB;)
    {
        bit = 0;
        if (i < lensA)
        {
            bit += A[i++] - 0x30;
        }
        if(j < lensB)
        {
            bit += B[j++] - 0x30;
        }
        /*把上一个计算的进位加上*/
        bit += flow;

        /*计算这次的进位*/
        flow = bit / 10;
        bit  = bit % 10;

        sum = sum + add[bit];
    }

    if(flow == 1)
    {
        sum = sum + '1';
    }
    reverse(sum.begin(),sum.end());

    cout << sum << endl;

    return 0;
}



你可能感兴趣的:(经典编程题,华为,大数求和)