分治法計算大整數乘法

2021-10-04 13:58:54 字數 1840 閱讀 7018

最近在學習演算法課程,自己寫了一點計算大整數乘法(正數)的**,如果有不對的地方希望能請大家指點一下我,謝謝!

**片.

#include

"pch.h"

#include

#include

#include

using

namespace std;

//通過鍵盤輸入獲取要計算的大整數

void

input

(string &str1, string &str2)

while

(true)}

//兩個n位整數相加

void

d_plus

(int p,

int q,

int c,

int n)

else c1 =0;

}}//兩個2位整數相乘

void

d_product

(int p,

int q,

int c)

; t1 = p[0]

* q[0]

; c[1]

= t1 %10;

c[0]= t1 /10;

t2 = p[1]

* q[1]

; c[3]

= t2 %10;

c[2]= t2 /10;

r[1]=

(p[0

]+ p[1]

)*(q[0

]+ q[1]

)- t1 - t2;

r[2]= r[1]

%10; r[1]

= r[1]

/10;d_plus

(c, r, c,4)

;}//兩個n位整數相減

void

d_mins

(int p,

int q,

int n)

else c =0;

}}void

integer_product

(int p,

int q,

int r0,

int n)

delete

r1;

delete

r2;

delete

r3;

delete

r4;

}void

print

(int c,

int n,

int temp)

//輸出計算結果

cout << endl;

}int

main()

int*a =

newint

[n];

//乘數a

int*b =

newint

[n];

//乘數b

int*c =

newint[2

* n]

;//c陣列初始化

temp =

2* n - n1 - n2;

for(

int i =

0; i < n; i++

)//將字串轉換為整型陣列,同時補0

integer_product

(a, b, c, n)

;//計算

print

(c,2

* n, temp)

;//輸出

delete

a;delete

b;delete

c;//刪除陣列

system

("pause");

return0;

}

大整數乘法 分治法

import sys def add n1,n2 字串加法 n1 n1 1 n2 n2 1 補齊到和的最大位數 相加後可能在最後進一位,所以末尾補乙個0 if len n1 1 and sum 0 0 sum sum 1 return sum def muti x1,x2 xi 123435 5 分...

分治 大整數乘法

第一次自己完整寫對,多多指教 演算法思路 分治。第一步 經過預處理將兩個整數變為長度一樣的兩個數 短的在前面補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 ...