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

2021-10-01 16:27:14 字數 1305 閱讀 9042

題目描述

高精度乘,求兩個很大的非負整數相乘的結果。

輸入

2個非負整數,每個一行,每個整數不超過240位。

輸出

乙個整數,表示相乘的結果。

例子

為了和演算法對應方便,用上面數乘下面數的方法12

2512

5502

5312

5為了運算方便,將上面兩數倒置,得到的結果也為倒序下標0

1234

5678

910a[i]52

1b[j]52

c[i+j]52

1055

2521

3逆序輸出就可得到結果

演算法分析:

1.將相乘的數用字串讀入,倒序讀入陣列a,b中

2.設陣列a為a[i],b為b[j]

3. 從上圖可以看出,每位乘數和另乙個乘數相乘都要後移一位,如a[0]*b時,c的第一位為c[0+0],a[1]*b時,c的第一位為c[1+0],a[2]*b,c的第一位為c[2+0],可以使用巢狀迴圈來實現,則c陣列中每位相乘的值為:

c[i+j]=c[i+j]+a[i]*b[j];

4.c陣列由於只是加法,所以可以直接進製:

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

c[i+j]=c[i+j]%10;

**

#include

using

namespace std;

int a[

250]

,b[250

],c[

500]

;//兩數相乘,積的長度小於兩數長度之和

intmain()

for(i=

0;isize()

;i++

)//a[i]*b[j]

for(i=

0;isize()

;i++)}

}int p=0;

//從後往前找c中第一位非0數

for(i=s1.

size()

+s2.

size()

-1;i>=

0;i--)}

//從p位置倒序輸出c

for(i=p;i>=

0;i--

)return0;

}

高精度乘高精度

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 通過這個例子我們再來...

高精度乘高精度

思路 用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,...

演算法 高精度計算乘法1(高精度乘單精度)

題目描述 高精度乘單精度,a b。a是乙個很大的非負整數,但不超過240位,b是乙個非負整數不超過10000,求a b。高精度乘單精度的數學實現 1 2 5 25 25 50 125 諸位進製 3 1 2 512 5 2525 5012531 25實現步驟 1 string s讀入高精度數,int ...