HDOJ 1002 A + B Problem II

[TOC]

解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1002
我的代码在这里

题目类型

大数加法

解题思路

模拟手算加法的过程

先把字符串补齐,在较短的串前补0,这里用的是c++的string构造函数

b = string(aLen-bLen,'0')+b;

然后开始模拟加法计算的过程,以个位来说,参加计算的分别是a的个位数字ai,b的个位数字bi,进位数字ci(当然初始为0),计算得到结果di,di%10 就是结果的个位,将这个结果放在在a的个位上(反正个位算过了,闲着也是闲着~),di/10 就是十位计算时的进位数字

for(int i=numLen-1; i>=0; i--)
    {
        int ai = a[i]-'0';
        int bi = b[i]-'0';
        di = ai + bi + ci;
        ci = di / 10;
        a[i] = (di % 10) +'0';
    }

最后的返回结果,要判一下最后是否有进位,即ci是否为0,如果不为0,说明有进位,要在结果串a前加进位‘1’

大数加法函数

整理一个大数加法的函数,不一定是最优的

string BigNumSum(string a,string b)
{
    int aLen = a.length();
    int bLen = b.length();
    if(aLen>bLen)
    {
        b = string(aLen-bLen,'0')+b;
    }
    else
    {
        a = string(bLen-aLen,'0')+a;
    }
    int numLen = a.length();
    int ci = 0;
    int di = 0;
    for(int i=numLen-1; i>=0; i--)
    {
        int ai = a[i]-'0';
        int bi = b[i]-'0';
        di = ai + bi + ci;
        ci = di / 10;
        a[i] = (di % 10) +'0';
    }
    return ci>0?"1"+a:a;
}

作业部落 CSDN
email : [email protected]

你可能感兴趣的:(HDOJ 1002 A + B Problem II)