HDOJ 1002 A + B Problem II

[TOC]

解題報告

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1002
我的代碼在這里

題目類型

大數(shù)加法

解題思路

模擬手算加法的過程

先把字符串補齊,在較短的串前補0,這里用的是c++的string構(gòu)造函數(shù)

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

然后開始模擬加法計算的過程,以個位來說,參加計算的分別是a的個位數(shù)字ai,b的個位數(shù)字bi,進位數(shù)字ci(當(dāng)然初始為0),計算得到結(jié)果di,di%10 就是結(jié)果的個位,將這個結(jié)果放在在a的個位上(反正個位算過了,閑著也是閑著~),di/10 就是十位計算時的進位數(shù)字

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

最后的返回結(jié)果,要判一下最后是否有進位,即ci是否為0,如果不為0,說明有進位,要在結(jié)果串a(chǎn)前加進位‘1’

大數(shù)加法函數(shù)

整理一個大數(shù)加法的函數(shù),不一定是最優(yōu)的

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

作業(yè)部落 簡書 CSDN
email : you_shoubian@163.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容