溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C/C++ 超長(zhǎng)正整數(shù)相加

發(fā)布時(shí)間:2020-07-27 22:07:21 來(lái)源:網(wǎng)絡(luò) 閱讀:334 作者:sonissa 欄目:編程語(yǔ)言

本題整體思想不難,主要是想好用什么容器去存儲(chǔ)計(jì)算值和計(jì)算結(jié)果值,這里用的是字符串,當(dāng)然也可以用數(shù)組,題目鏈接:https://www.nowcoder.com/practice/5821836e0ec140c1aa29510fd05f45fc?tpId

以下為解答代碼(具體細(xì)節(jié)看注釋):

string AddLongInteger(string addend, string augend){
    int i = 0,n=addend.size()>augend.size()?n=addend.size():n=augend.size();  //n為較長(zhǎng)計(jì)算值的長(zhǎng)度,用來(lái)循環(huán)計(jì)算時(shí)使用
    string c;              //計(jì)算結(jié)果保存的值
    int  temp, tep = 0;         //進(jìn)位值要記得初始化
    reverse(addend.begin(), addend.end());         //這里將兩個(gè)加數(shù)都翻轉(zhuǎn)過(guò)來(lái)計(jì)算,主要是為了寫(xiě)入結(jié)果的時(shí)候可以直接使用‘+=’
    reverse(augend.begin(), augend.end());         //當(dāng)然也可以沒(méi)有這一步,直接從后往前算
    for (; i < n; i++){
        int a = i<addend.size() ? addend[i] - '0' : 0;         //若是一個(gè)加數(shù)已經(jīng)全部計(jì)算完成,在接下來(lái)就用0代替來(lái)計(jì)算
        int b = i<augend.size() ? augend[i] - '0' : 0;
        temp = (a+b+tep)% 10;           //計(jì)算結(jié)果值(要填入結(jié)果的值)
        tep = (a + b + tep) / 10;   //進(jìn)位值
        c += temp + 48;  // 填入結(jié)果
    }
    if (tep>0){    //若是最后一位計(jì)算有進(jìn)位值,則直接填入結(jié)果
        c += tep+'0';
    }
    reverse(c.begin(), c.end());   //將計(jì)算結(jié)果反過(guò)來(lái)就是正確結(jié)果
    return c;
}

int main(){
    string a, b, c;
    while (cin >> a >> b){
        cout << AddLongInteger(a, b) << endl;
    }
    return 0;
}
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI