主题:求大数相乘的算法,用数组实现!!!
spurspro
[专家分:0] 发布于 2005-09-14 12:37:00
本人想得到用数组解决乘法问题的算法
回复列表 (共9个回复)
沙发
boxertony [专家分:23030] 发布于 2005-09-14 22:16:00
在网上可以搜到一堆
板凳
天水 [专家分:320] 发布于 2005-09-18 16:14:00
我也想了解 数组 请详细告知怎么搜。
另:
急需pascal奥赛书籍(中学版),各位大哥帮帮忙,有的请回我贴,再联系,或写信给我。我寄钱去时出版社以没货~~!~·!唉!!
邮箱:bad.boy01@126.com
跪谢!
3 楼
boxertony [专家分:23030] 发布于 2005-09-19 10:06:00
用大数乘法做关键字呗。因为用到数组来做乘法,相乘的数肯定很大,呵呵
4 楼
handangreen [专家分:0] 发布于 2005-09-27 13:22:00
WWW.china-pub.com去那里定购吧
5 楼
40404870 [专家分:160] 发布于 2005-10-03 16:13:00
书店有卖啊 ~!!!!!!!!!
6 楼
游侠UFO [专家分:1200] 发布于 2005-10-06 19:27:00
好像叫高精度乘法吧
7 楼
xuzhenyi [专家分:850] 发布于 2005-10-13 22:33:00
高精度乘法
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 楼
fyl2009 [专家分:0] 发布于 2006-01-09 15:15:00
此算法效率太低,建议使用分割相乘,然后再相加的方法,两者的效率之差为无穷大(如果位数够多的话)。
比如:
1111×2222=1100×2200+1100×22+11×2200+11×22;
所有的0都可以在存放的数组中通过移位实现。
9 楼
pcboyxhy [专家分:2910] 发布于 2006-01-12 08:15:00
FFT
我来回复