由於相乘的兩個數答案很大超過了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...