第一次寫,寫得不好望見諒。
使用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的...