高精度演算法 大數乘法

2021-10-04 23:57:57 字數 1673 閱讀 4957

由於相乘的兩個數答案很大超過了longlong或者unsigned longlong,就需要使用大數乘法。

給定兩個正整數a和b,請你計算a * b的值。

輸入格式

共兩行,第一行包含整數a,第二行包含整數b。

輸出格式

共一行,包含a * b的值。

資料範圍

1≤a的長度≤100000

1≤b≤10000

輸入樣例:23

輸出樣例:

6演算法思路:先用字串把數存起來,然後把每乙個數字存到陣列中,用陣列模擬乘法進行運算

//大數乘非大數與加法類似

#include

using

namespace std;

typedef

long

long ll;

namespace io

while

(c>=

'0'&&c<=

'9')

return o*f;}}

using

namespace io;

const

int n=

1e5+7;

vector<

int>

mul(vector<

int>a,

int b)

while

(res.

size()

>

1&&res.

back()

==0)res.

pop_back()

;//如果有前導零就把前導零彈出

return res;

}int

main()

//大數乘大數使用陣列模擬

#include

using

namespace std;

string a,b;

int numa[

2007

],numb[

2007

],sum[

2007];

intmain()

numa[0]

=a.size()

,numb[0]

=b.size()

;//num[0]存放的是數的長度

for(

int i=

0;i;i++

)numa[numa[0]

-i]=a[i]

-'0'

;//把每一位存放陣列

for(

int i=

0;i;i++

)numb[numb[0]

-i]=b[i]

-'0'

; sum[0]

=numa[0]

+numb[0]

-1;//大數乘大數的答案長度不會超過兩個大數的長度相加-1.

for(

int i=

1;i<=numb[0]

;i++)}

if(sum[sum[0]

+1]>

1)sum[0]

++;//把前導零剔除

for(

int i=sum[0]

;i>=

1;i--

)return0;

}

c 高精度乘法(大數乘法)

對於計算機無法用普通資料型別 如 longint 表示的大整數進行乘法運算,稱為高精度乘法。高精度乘法主要包括以下幾個要求及過程 1 為了獲取輸入數字的每一位的值,包括個位,十位等,輸入整型的資料是無法滿足的,因此,輸入資料必須為字串形式。2 字串轉整型,儲存每一位值於陣列中 3 高精度乘法,重點!...

大數相乘 高精度乘法

給定兩個數,相乘如何得到高精度的結果,給定的兩個數,不確定是不是浮點數,即可能乙個數帶多位小數,另乙個帶小數,或者兩個數都帶多位小數,或都不帶小數,針對這些情況,程式應該都要考慮,所謂的高精度其實就是看兩個數的小數字有多少,那麼其結果的小數字數應該為兩數小數字數之和。針對上述描述,其實大部分思路首先...

大數系列 高精度乘法

the problem is to multiply two integers x,y.0 x,y 10250 the input will consist of a set of pairs of lines.each line in pair contains one multiplyer.fo...