高精度乘法

2021-10-19 09:47:55 字數 867 閱讀 9361

c++中資料儲存的範圍是有限的,最長的longlong型最大只能儲存2^63-1。如果要是需要儲存更大的數就只能使用陣列了。這樣儲存的數的運算需要另外編寫程式。

這裡介紹高精度乘法

這種乘法的運算類似於小學學習的豎式,從個位開始,乙個乘數逐位乘另乙個乘數,再將結果相加。

首先我們需要先讀入資料,這裡使用乙個字串讀入,由於讀入時首位是最大位,而運算時需要從個位開始,再將字串反序的儲存到乙個整形陣列之中,字串的儲存採用的是ascii碼,轉換時,需要減去』0』。

乙個乘數從第一位開始遍歷,分別去乘另乙個乘數,注意的是每次乘完一輪後,下一次乘都需要將結果從下一位開始,就是說最後的相加是錯位的。如果等到最後加,會比較麻煩,所以沒乘完一次就相加,注意此處的進製包括加起來的進製和之前乘時的進製

最後去掉前導0(0*100000=000000),反序輸出

#include

#include

#include

using

namespace std;

const

int n=

1e6;

int a[n]

,b[n]

,ans[n]

;string s1,s2;

intmain()

ans[k]

=tmp;

//最後可能都乘完,還剩下進製

}int i;

for(i=k;i>

1;i--)if

(ans[i]!=0

)//除0

break

;for

(;i;i--

)//反序輸出

cout<;return0;

}

高精度減法,高精度乘法

高精度減法 oj資料偏弱如果新增乙個101 2就錯了,下面這一步是為了防止錯誤的 if a aa 0 可能出現第一位的1被借走的的情況,所以加乙個while找第乙個不是0的 while c i 0 i include include include include include include u...

高精度乘法

問題描述 給你兩個正整數a,b,計算它們的乘積。輸入格式 第一行乙個正整數a 第二行乙個正整數b 輸出格式 一行,表示a b 樣例輸入 111222333444555666777888999 999888777666555444333222111 樣例輸出 提示 a,b分別不超過100000位 ff...

高精度乘法

include include include includeusing namespace std const int maxn 5000 inline int get struct data data operator const data b for int i 1 i c.len i whi...