高精度乘高精度

2021-10-04 16:49:53 字數 1289 閱讀 8338

c=a * b (a、b均是高精度數)

比如a=156,b=3,求a * b

很容易知道答案是468,怎樣算的呢?

① 首先讓3 * 6 = 18,然後向進一位,並且這位只保留8

② 讓3 * 5 + 進製1 = 16,然後向前進一位,並且這位只保留6

③ 讓3 * 1 + 進製1 = 4,此時不向前進製,保留4

所以最終答案是468

通過這個例子我們再來分析發現,c0 = a0 * b0,c1 = a1 * b0,c2 = a2 * b0,可以看出c的下標是和a、b下標相關的,0=0+0,1=1+0,2=2+0。

由此我們可以得出c[i+j] += a[i] * b[j]。

那麼核心**就出來了

c[i+j]

+=a[i]

*b[j]

; c[i+j+1]

+=c[i+j]/10

;// 進製

c[i+j]%=

10;//實際保留的值

完整**:

#include

#include

using

namespace std;

int a[

10000

],b[

10000

],c[

10000];

intmain()

int lenc=lena+lenb-1;

// 兩位數相乘最大位數是lena+lenb ,-1是因為下標從0開始

while

(c[lenc]==0

&& lenc>

0) lenc--

;// 去前導0

for(

int i=lenc; i>=

0; i--

)}

至於為什麼是c[i+j]+=a[i]*b[j],而不是c[i+j]=a[i]*b[j],因為剛才上面的例子 b 是個一位數的,而實際中 b 是有很多位數字組成的,你要把那些都累加起來才能構成乙個ci的。

舉個例子:

借鑑:高精度運算(大數運算)

高精度乘高精度

思路 用vector表示大整數,整數的低位存在陣列索引的低位 a x b c其中c的每一位 如第3位 是由a和b的相應位相乘累加,處理後得到 如 1 2,2 1 include using namespace std const int demical 10 void input string s,...

大數相乘「高精度乘低精度」和「高精度乘高精度」

二 高精度乘高精度 如下 由於計算機的儲存位元組有限,所以不能完整表示乙個很大整數的精確值,這時候就得用到其他的方法,稱之為高精度演算法。這裡的高精度乘法主要指按位模擬乘法,實際上就是模擬乘法的過程,也就是筆算的過程。高精度乘低精度,即乙個大數與乙個小於10000的數相乘,大數使用字串來進行儲存,較...

演算法 高精度乘法2(高精度乘高精度)

題目描述 高精度乘,求兩個很大的非負整數相乘的結果。輸入 2個非負整數,每個一行,每個整數不超過240位。輸出 乙個整數,表示相乘的結果。例子 為了和演算法對應方便,用上面數乘下面數的方法12 5 2512 5502 5312 5為了運算方便,將上面兩數倒置,得到的結果也為倒序下標0 1234 56...