高精度乘法

10000位为什么超时代码如下typept=array[0..10000]oflongint;vars:ansistring;la,lb,lc:longint;a,b,c... 10000位为什么超时
代码如下
type
pt=array[0..10000] of longint;
var
s:ansistring;
la,lb,lc:longint;
a,b,c:pt;

procedure init;
var i:longint;
begin
readln(s);
la:=length(s);
for i:=1 to la do
a[la-i+1]:=ord(s[i])-ord('0');
readln(s);
lb:=length(s);
for i:=1 to lb do
b[lb-i+1]:=ord(s[i])-ord('0');
end;

procedure mult(a,b:pt);
var i,j,x:longint;
begin
for i:=1 to la do
begin
x:=0;
for j:=1 to lb do
begin
x:=a[i]*b[j]+x div 10+c[i+j-1];

c[i+j-1]:=x mod 10;
end;
c[i+lb]:=x div 10;
end;
lc:=la+lb;
while (c[lc]=0) and (lc>1) do dec(lc);

for i:=lc downto 1 do write(c[i]);
end;

begin
init;
mult(a,b);
end.
展开
 我来答
百度网友bd4df3c7a
2008-10-05 · TA获得超过203个赞
知道小有建树答主
回答量:166
采纳率:0%
帮助的人:136万
展开全部
program gaojingdu;
var
a,b,c:array[0..20000] of 0..9;
n:string;
i,j,x:integer;
begin
readln(n);
a[0]:=length(n);
for i:=1 to a[0] do a[a[0]-i+1]:=ord(n[i])-ord('0');
readln(n);
b[0]:=length(n);
for i:=1 to b[0] do b[b[0]-i+1]:=ord(n[i])-ord('0');for i:=1 to a[0] do
begin
x:=0;
for j:=1 to b[0] do
begin
x := a[i]*b[j]+ x div 10 +c[i+j-1];
c[i+j-1]:=x mod 10;

end;
c[i+j]:= x div 10;
end;
c[0]:=i+j;
while (c[c[0]]=0) and (c[0]>1) do c[0]:=c[0]-1;
for i:=c[0] downto 1 do write(c[i]);
readln;
end.

我这个应该可以。。

再看你的。
首先数组不够大,至少开到20000。

再者,n2 的时间复杂度,至少100000000次计算,再乘上每次3~4步,计算机没那么快诶。
百度网友b004198d8
2008-09-29 · TA获得超过2486个赞
知道小有建树答主
回答量:2100
采纳率:0%
帮助的人:1219万
展开全部
数组开小了吧。。。
2个万位数相乘,结果的长度至少为l1+l2-1,数组仅开1万似乎不够
而且数位太大超时也很正常
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
贝余
2008-09-29
知道答主
回答量:39
采纳率:0%
帮助的人:0
展开全部
我们还没学过呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式