加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

华为机试题:大数求和

发布时间:2020-12-14 02:04:38 所属栏目:大数据 来源:网络整理
导读:描述:? 给定两个非常大的正整数A和B,位数在50至100之间。求C=A+B; ? 题目类别: ?字符串? 难度: ?中级? 运行时间限制: 10Sec 内存限制: 128MByte 阶段: ?入职前练习? 输入: ? 因为A和B很大,从高位到低位,以字符串的形式输入两行数字A和B。A和B的位数在50

描述:?

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

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

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

?
输出: ?

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

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

#include <iostream>
#include <stdio.h>
#include <string>
#include <algorithm>

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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读