大數加法簡易理解並實現

2021-07-15 08:48:04 字數 1664 閱讀 8941

第一次寫,寫得不好望見諒。

使用c++語法,**可用於杭電oj 1002。

思路:字串模擬大數

字串倒序

一位位對齊後計算

好處:使進製更簡單(如果不逆序,判斷最高位是否進製後再確定存放的位置會較麻煩)

缺陷:**冗雜

無法加負數

無法加小數

多個零相加時仍出現多個零而不是單個零

心得:時時刻刻注意減去『0』的個數

判斷當前結果有沒有進製1

說明圖:

流程圖(可放大):

示例**:

#include 

using

namespace

std;

void initialization(char a, char b)//字串初始化

int lenth(char a)//計算字串長度

return n;

}void reverse(char a)//字串逆序

}void add(char a, char b, char result)//大數加法

else

if (result[i] != '\0' && a[i] + b[i] + result[i] - '0' - '0'

<= '9')//結果有進製且兩數相加小於9時,此時應加上結果的進製和減去兩個'0'

else

if (result[i] == '\0' && a[i] + b[i] - '0'> '9')//結果沒有進製且兩數相加大於9時,即會產生進製

else

if (result[i] != '\0' && a[i] + b[i] + result[i] - '0' - '0' > '9')//結果有進製且兩數相加大於9時,即會產生進製,此時應加上結果的進製和減去兩個'0'

}for (i = min; i < max; i++)//從對齊完後那位開始,迴圈到最長時終止,例如123+45,45已經和23相加了,1放下來和結果相加就行

}else

}}int main()

, b[1000] = , result[1001] = ;//a、b為被加數與加數,result為和

initialization(a, b);//初始化

reverse(a), reverse(b);//將a、b字串逆序

add(a, b, result);//將a、b字串相加並把結果存入result

reverse(a), reverse(b),reverse(result);//再逆序一次變正序

cout

<< "case "

<< i+1

<< ":"

<< endl;

cout

<< a << " + "

<< b << " = "

<< result << endl;

if (i != n-1)

cout

<< endl;//格式輸出

}return

0;}

大數乘法 大數加法實現

include include include include include include include include using namespace std 實現兩個數的加法 判斷乙個字串是否為有效的數 bool isvalidnumber const string s if 1 len ...

大數加法(C 實現)

問題 1513 藍橋杯 演算法提高vip 大數加法 題目描述 輸入兩個正整數a,b,輸出a b的值。輸入兩行,第一行a,第二行b。a和b的長度均小於1000位。輸出一行,a b的值。樣例輸入 4 2樣例輸出 6 includeusing namespace std typedef long long...

鍊錶實現大數加法

標籤 演算法 你的任務是完成一條能實現加法功能的單向鍊錶,需要實現的函式在標頭檔案已給出。假如現在有 123 與 234 兩個數字,那麼他們在鍊錶中的儲存結構將會是 3 2 1與 4 3 2 注意到這裡的鍊錶只允許從前端插入,你也可以把這個特殊的鍊錶當做棧來處理。輸入的數字不會有負數且不會有前導0的...