一般計算方法分治法(理想狀態下)
分治法(非理想狀態下)
理想狀態下;
x y=
e∗10
2⌊n/
2⌋+(
g+e+
f)∗1
0⌊n/
2⌋+f
xy=e*10^}+(g+e+f)*10^+f
xy=e∗1
02⌊n
/2⌋+
(g+e
+f)∗
10⌊n
/2⌋+
f非理想狀態下;
x y=
e∗10
⌊nx/
2⌋+⌊
ny/2
⌋+(g
+e∗1
0⌊nx
/2⌋+
⌊ny/
2⌋+f
)+fxy=e*10^+}+(g+e*10^+}+f)+f
xy=e∗1
0⌊nx
/2⌋
+⌊ny
/2⌋
+(g+
e∗10
⌊nx
/2⌋+
⌊ny
/2⌋+
f)+f
當拆分後的子整數的位數為1時,結束遞迴。
理想狀態下;
// 大整數乘法--理想狀態
#include
#include
using
namespace std;
intsign
(long a)
;long
bigintmultiply_ideal
(long x,
long y,
int n)
;int
main()
intsign
(long a)
long
bigintmultiply_ideal
(long x,
long y,
int n)
}
非理想狀態下;
// 大整數乘法--非理想狀態
#include
#include
using
namespace std;
intsign
(long a)
;long
bigintmultiply_nonideal
(long x,
long y,
int n_x,
int n_y)
;int
main()
intsign
(long a)
long
bigintmultiply_nonideal
(long x,
long y,
int n_x,
int n_y)
}
理想狀態下;
非理想狀態下;
(注:執行計算的整數並不足夠大,這裡僅僅是舉個栗子!)
分治 大整數乘法
第一次自己完整寫對,多多指教 演算法思路 分治。第一步 經過預處理將兩個整數變為長度一樣的兩個數 短的在前面補0 第二部 把兩個大整數都平分為前後兩部分 第三部 按以下公式計算 實現大數乘法之前實現了大數加減法 公式 x a 10 n 2 b y c 10 n 2 d xy ac 10 n a b ...
分治 大整數乘法
問題描述 設x和y是兩個n位的二進位制整數,現在要計算它們的乘積xy,傳統方法計算每2個1位數乘法或加法都看作一步運算,這樣需要o n2 次位運算,代價太高,現在運用分治法設計乙個更有效的大整數乘法演算法。當n 1時,計算x y就是一次位乘。現在對x y進行劃分,把x和y各分為兩段,每段長為n 2 ...
分治演算法 大整數乘法
用分治演算法程式設計實現兩個n 位十進位製大整數的乘法運算。分析 用分治演算法程式設計實現兩個n 位十進位製大整數的乘法運算。演算法描述 兩個十進位制的數 x y x a 10 n1 b y c 10 n2 d 則 x y a 10 n1 b c 10 n2 d 設乙個陣列,將其看做10000 進製...