大數相乘 快速演算法,誰知道多位數乘法的快速計算方法?

2021-12-25 02:25:36 字數 6146 閱讀 6836

1樓:匿名使用者

給你乙個吧

速度還可以

自己讀下**

/**************************************

演算法複雜度為:o(longhta*longthb)longtha為乘數的位數

longhtb為被乘數的位數

***************************************/

#include

#include

#include

#define len 1000

void mult(char ,char ,char );

main()

void reverse(char a)

}longth=i+j-1;

if(jw>0)

ans[longth++]=jw+'0';

ans[longth]='\0';

reverse(ans);}

2樓:匿名使用者

在長度不很大的情況下,ftt不能體現優勢,其實只要減少乘法除法應該可以得到相當好的演算法。不過大部情況下這些做法都比較複雜,其實簡單的查表可能更好。

做乙個0-9的乘法表結果m,每次計算時只要c[i +j] = m[ia[i]][ib[j]];就好。

進製也可以同理,0-99的進製表和餘數表就可以解決除法和模的問題,不過這不是關鍵。

3樓:匿名使用者

大數乘的最快演算法是快速傅利葉變換法,這有乙個,但不是我本人寫的。

#include

#include

#include

#include

using namespace std;

const double pi = acos(-1);

typedef complexcp;

typedef long long int64;

const int n = 1 << 16;

int64 a[n], b[n], c[n << 1];

void bit_reverse_copy(cp a, int n, cp b)

}void fft(cp _x, int n, bool flag)

}} memcpy(_x, x, sizeof(cp) * n);

for (nc = na + nb - 1; nc > 1 && !c[nc - 1]; --nc);

} const int len = 5, mod = 100000;

i += len;

if (i)

}void print(int64 a, int n)

char buf[n + 10];

int main()

else convert(buf, a, na);

scanf("%s", buf);

if (buf[0] == '-')

else convert(buf, b, nb);

polynomial_multiply(a, na, b, nb, c, nc);

int64 t1, t2;

t1 = 0;

for (int i = 0; i < nc; ++i)

for (; t1; t1 /= mod) c[nc++] = t1 % mod;

if (sign) putchar('-');

print(c, nc);

} return 0;}

4樓:炒飯

**的oj,怎麼沒聽過

誰知道多位數乘法的快速計算方法?

5樓:荒漠一點紅

1、 十幾乘十幾:口訣:頭乘頭,尾加尾,尾乘尾。

例:12×14=?

解: 1×1=1

2+4=6

2×4=8

12×14=168

注:個位相乘,不夠兩位數要用0佔位。

2、 頭相同,尾互補(尾相加等於10):口訣:乙個頭加1後,頭乘頭,尾乘尾。

例:23×27=?

解:2+1=3

2×3=6

3×7=21

23×27=621

注:個位相乘,不夠兩位數要用0佔位。

3、 第乙個乘數互補,另乙個乘數數字相同:口訣:乙個頭加1後,頭乘頭,尾乘尾。

例:37×44=?

解:3+1=4

4×4=16

7×4=28

37×44=1628

注:個位相乘,不夠兩位數要用0佔位。

4、 幾十一乘幾十一:口訣:頭乘頭,頭加頭,尾乘尾。

例:21×41=?

解:2×4=8

2+4=6

1×1=1

21×41=861

5、 11乘任意數:口訣:首尾不動下落,中間之和下拉。

例:11×23125=?

解:2+3=5

3+1=4

1+2=3

2+5=7

2和5分別在首尾

11×23125=254375

注:和滿十要進一。

6、 十幾乘任意數:口訣:第二乘數首位不動向下落,第一因數的個位乘以第二因數後面每一                                          個數字,加下一位數,再向下落。

例:13×326=?

解:13個位是3

3×3+2=11

3×2+6=12

3×6=18

13×326=4238

注:和滿十要進一。

6樓:苯寶寶不笨

兩位數乘法的快速計算方法見下表:

兩位數乘法的部分推論方法:

設兩位數分別是10a+b,10c+d,其乘積為s,根據多項式:

s= (10a+b) x (10c + d) = 10a x 10c + b x 10c + 10a x d+ bxd。

一、首數相同,尾數互補(兩個數相加等於10叫互補)

因為個位數互補,所以b+c = 10

(10a+b)(10a+c)

= 100a²+10a(b+c) +bc

= 100a²+10a x10 +bc

= 100a(a+1)+bc

速算方法:

1.首數加1乘以該首數;

2.然後連線上兩尾數的乘積。

例:25x25=|(2 + 1) x 2| | 5 x 5|= | 6| | 25 | = 625

36x34=|(3 + 1) x 3| | 6 x

4|= | 12 | | 24 | = 1224

二、首數相同,尾數不互補

(10a+b)(10a+c)

= 100a²+10a(b+c) +bc

= 10a (10a + b + c ) + bc

=( (10a+b)+ c ) x 10a + bc

速算方法一:

1.第二個乘數的個位數與第乙個乘數相累加;

2.然後乘以第二個乘數剩餘的數;

3.最後,再加上兩尾數的乘積。

例:72 *73 = (72 + 3 )x 70 + 2*3 = 5256

速算方法二:

1.計算首位數的平方,得數作為前積;

2.兩尾數的和與首位相乘,得數作為中積;

3.兩尾數相乘,得數作為後積;

應用舉例:

64 x 67

6 x 6 = 36

(4+7) x 6 = 66

4 x 7 = 28

結果為:4288(36+6=42;28+60=88)

三、首數互補,尾數相同

十位數互補,所以有a + c = 10

(10a+b)(10c+b) = 100ac + 10(ba+bc) + b²=100ac + 10b(a + c) + b²

=100ac + 10bx10 + b²

=100(ac + b) + b²

速算方法:

1.兩個首位相乘,其積再加上乙個尾數,得數作為前積;

2.兩尾數相乘,即尾數的平方,得數作為後積,沒有十位補0;

應用舉例:

36 x 76 =| 3 x 7 + 6 | | 6 x 6|= | 27 | | 36 | = 2736

32 x 72 =| 3 x 7 + 2 | | 2x 2|= | 23 | | 04 | = 2304

四、首數不互補,尾數相同

如:72x22

計算公式推導

(10a+b)(10c+b) = 100ac + 10(ba+bc) + b²=100ac + 10b(a + c) + b²

速算方法:

1.首數乘以首數,再加尾數,得數作為前積;

2.看兩個首數的和比10大多少,或者少多少;

比10大多少個,就加上幾個尾數;

比10少多少個,就減上幾個尾數;

加減的位置是:一位數十位加減;兩位數百位加減;

結果作為中積;

3.尾數相乘,作為後積;

應用舉例:

67 x 87 =| 6 x 8 + 7 | | 7 x 7| + (6+ 8 -10 )x 7 x 10= 5549 + 280

= 5829

7樓:匿名使用者

嘿嘿嘿 只要肯出錢 去買臺計算機 哈哈

8樓:匿名使用者

9樓:匿名使用者

用手指表示數

以手指為基礎。腦記十位數,手示個位數,可以減少思維和計算上的負擔,也有利於口算能力。大多數人用右手寫字,左手就用

來記數。

我們把和拇指方向相同的手指叫做該數的外指,和拇指方向相反的手指叫做該數的內指。

1.拇指屈表示1。這時1的外指是1,內指是4。

2.拇指,食指同時屈表示2。這時2的外指是2,內指是3。

……………………

5.五指全屈表示5。這時5的外指是5,內指是0。

6.拇指伸出表示6。這時6的外指是1,內指是4。

……………………

10.五指全伸表示0。這時0的外指是5,內指是0。

湊數:兩數之和等於5,它們互為湊數。如:1和4

尾數:大於5而小於10的數減去5所得的數叫該數的尾數。如:6的尾數為1

補數:兩數之和為10,100,1000……它們互為補數。如:4和6

多位數乘多位數

速演算法的多位數乘法是完全建立在一位數乘法的基礎上的

一,基本規律

1.看看積的位數:設被乘數是n位數,乘數是m位數,那麼積就是n+m位。

2.看看運算次數:任何兩個多位數相乘,乘數和被乘數的每位數都要相乘一次,不能少乘也不能多乘。由於一位數乘n位數的相乘

次數為n+1次,因此m位數乘n位數總乘數為(n+1)*m次。(含首位0)

3.看看運算順序:採用高位算起,被乘數和乘數依一定程式同時從「逐位乘」的原理出發,通過找出相乘積的「同位數」將積的每個「同

位數」分別相加,直接找出總積的每位數,邊算邊清位直接報出每位得數,達到「逐位清」。這種運算方法可以直呼得數,簡化運算

過程,快速,準確,方便。

每位數:相同數字上的數。數字:個位,十位,百位……叫數字。

如乙個乘法的傳統豎式:

32* 73

96224

2336

其中9和4就叫同位數。這個小學都有教吧。

二,計算方法

史豐收的多位數乘法,是直接找總積的每位數來進行的,而總積的每位數,就是所有各位數逐位相乘中所得到的各個「同位數」之

和。 1.結合用手指記數

2.被乘數面前寫0

3.乘數的首位與被乘數的尾位數對齊,這樣寫,利於看清楚運算程式,找相乘二數。以首尾相接為準,以前(左邊)都是乘數的

首數開頭乘,簡稱「首開頭」。以後(右邊)都是被乘數的尾數開頭乘,簡稱「尾開頭」

4.書寫積的每位數:積的首位數對準開頭的0,後面逐位對齊,最後積剛好對到乘數的最後一位,因為被乘數首位前的0多出一

位,而乘數與被乘數首尾

誰知道多肉植物怎麼可以快速長大嗎

首先,當然是盡可能將仙人球放到日照時間長的地方,而不是光線最強的地方。對植株補光,應當延長光照時間,而不是因為光線弱為增加光強補光 另外呢是應當保持盆土有足夠的濕度,尤其是附生掌類,它們需要土壤較長期地濕潤。因為他們生長在枯葉或樹枝上,為了保持自己的水分,只要根系一發現水分威脅,馬上就會關閉氣體交換...

誰知道這種長吊燈的名字,多錢,誰知道這種長吊燈的名字,乙個多錢???

這種是工程訂製燈,非標準產品,不菲。效果圖中比例也不太準確,難以看出尺寸。隨便估一下,一根彎管大約50元左右,你可以粗略算算 家裡那種大的吊燈,只是安裝要多少錢乙個?10 200到300之間的燈好看的對流行的 長沙大概是150左右!你好,各個地方有點差異,大概一天的工錢在100 200之間。誰知道這...

快速祛痘的方法,快速祛痘的方法誰知道

鷹擊世界 您好,知我藥妝肌膚顧問很高興幫助您。一 維c黃瓜緊膚 自制方法 1.黃瓜洗淨,去皮,放入攪拌機中攪拌成泥狀。2.維生素c片放入研缽中研磨成細粉。3.將維生素c粉末 橄欖油加入黃瓜泥中,攪拌均勻,調成泥狀。二 土豆泥 將200g土豆帶皮煮熟,去皮,加少量原汁搗成泥。加入牛奶 甘油混合搗勻成糊...