回 帖 发 新 帖 刷新版面

主题:求大数相乘的算法,用数组实现!!!

本人想得到用数组解决乘法问题的算法

回复列表 (共9个回复)

沙发

在网上可以搜到一堆

板凳

我也想了解  数组  请详细告知怎么搜。

另:

   急需pascal奥赛书籍(中学版),各位大哥帮帮忙,有的请回我贴,再联系,或写信给我。我寄钱去时出版社以没货~~!~·!唉!!
        邮箱:bad.boy01@126.com
                                   跪谢!

3 楼

用大数乘法做关键字呗。因为用到数组来做乘法,相乘的数肯定很大,呵呵

4 楼

WWW.china-pub.com去那里定购吧

5 楼

书店有卖啊 ~!!!!!!!!!

6 楼

好像叫高精度乘法吧

7 楼

高精度乘法
var a,b,c:array[1..1000] of integer;
i,j,k,l,m,code:integer;
s,p:string;
begin
readln(s);
readln(p);
l:=length(s);
for i:=l downto 1 do
Val(s[i],a[l-i+1],code);
m:=length(p);
for i:=m downto 1 do
Val(p[i],b[m-i+1],code);
for j:=1 to m do
for i:=1 to l do
begin
if c[i+j-1]+a[i]*b[j]<=9 then begin
c[j+i-1]:=c[i+j-1]+a[i]*b[j];k:=i+j-1;end else
begin
c[j+i-1]:=c[i+j-1]+(a[i]*b[j]) mod 10;
c[j+i]:=c[j+i]+ c[j+i-1] div 10+ (a[i]*b[j]) div 10;
c[i+j-1]:=c[i+j-1] mod 10;
k:=i+j;
end;
end;
for i:=k downto 1 do
write(c[i]);
readln;
end.

8 楼

此算法效率太低,建议使用分割相乘,然后再相加的方法,两者的效率之差为无穷大(如果位数够多的话)。
比如:
1111×2222=1100×2200+1100×22+11×2200+11×22;
所有的0都可以在存放的数组中通过移位实现。

9 楼

FFT

我来回复

您尚未登录,请登录后再回复。点此登录或注册