c 高精度運算 加法和乘法

2021-10-25 11:48:50 字數 1398 閱讀 4630

題目:用高精度計算出s=1!+2!+3!+…+n! (n≤50)s=1!+2!+3!+…+n!(n≤50)

#include #include #include using namespace std;

int n;

string midres[60];

string mul(string str1, string str2)//乘法-解釋見後面

, b[100] = , c[100000] = ;

int lena = str1.length();

int lenb = str2.length();

int lenc = lena + lenb;

for (int i = 0; i < lena; i++)

for (int i = 0; i < lenb; i++)

for (int i = 0; i < lena; i++)

for (int j = 0; j < lenb; j++)

while (c[lenc - 1] == 0 && lenc > 1)

for (int i = lenc - 1; i >= 0; i--)

return ans;

}string add(string str1, string str2)

lenb = str2.length();

}else

lena = str1.length();

}int plus = 0;

string ans = "";

for (int i = 0; i < lena; i++)

if (plus != 0)

reverse(ans.begin(), ans.end());

return ans;

}int main()

else

midres[i] = mul(midres[i - 1], s);}}

string ans = "0";

for (int i = 0; i <= n; i++)

cout《參看乘法原理:

乘法豎式

關鍵點分析

1.核心**(乘法運算部分)是由模擬乘法豎式算出來的:

(1) 數1的倒數第i位與數2的倒數第j位相乘所得到的值應存在結果的倒數第i+j位上。

(2) 如果結果的i+j位大於9,則進製到i+j+1位。

c[i+j]+=an[j]*bn[i];

c[i+j+1]+=c[i+j]/10;

c[i+j]%=10;

i 位數 與 j 位數 相乘,其結果最多為 i+j 位。

要注意結果字首中的0以及結果為0的情況。

while(c[clen-1]==0 && clen>1)

高精度加法和高精度乘法

題目描述 谷學長有乙個非常簡單的問題給你,給你兩個整數a和b,你的任務是計算a b。輸入 輸入的第一行包含乙個整數t t 20 表示測試例項的個數,然後2 t行,分別表示a和b兩個正整數。注意整數非常大,那意味著你不能用32位整數來處理。你可以確定的是整數的長度不超過1000。輸出 對於每乙個樣例,...

高精度加法和乘法

今天偶然看了一下某大神的模板,不經意翻到這個就順便 借 了一下 上 吧 date 2015 8 21 晚上 author itak motto 今日的我要超越昨日的我,明日的我要勝過今日的我 以創作出更好的 為目標,不斷地超越自己。include include include using name...

高精度加法和乘法

今天偶然看了一下某大神的模板,不經意翻到這個就順便 借 了一下 上 吧 date 2015 8 21 晚上 author itak motto 今日的我要超越昨日的我,明日的我要勝過今日的我 以創作出更好的 為目標,不斷地超越自己。include include include using name...