回 帖 发 新 帖 刷新版面

主题:pascal 高精度 乘法

[color=000080]请大家看看我这程序有啥问题,帮忙改一下![/color]
[size=3]type numtype=array[1..500]of word;
var var a,b,c:numtype;
    la,lb,i:integer;
    s1,s2:string;
procedure cheng(var a:numtype; b:numtype);
 var k,l,j:integer;
  begin
   for j:=1 to la do
    begin
     for k:=1 to lb do inc(c[j],a[j]*b[k]);[color=FF0000]{这里的 [color=00FF00]k 始终=lb  [/color]不知道是什么问题,请大家看看}[/color]     c[j+1]:=(a[j]*b[k]) div 10;
     c[j]:=(a[j]*b[k]) mod 10;
    end;
    while c[la+1]<>0 do
     begin
       la:=la+1;
       c[la]:=(a[j]*b[k]) div 10;
       c[la-1]:=(a[j]*b[k]) mod 10;
     end;
    a:=c;
  end;
begin
  readln(s1);
  la:=length(s1);
  for i:=1 to la do a[la-i+1]:=ord(s1[i])-48;
  readln(r);
  readln(s2);
  lb:=length(s2);
  for i:=1 to lb do b[lb-i+1]:=ord(s2[i])-48;
  cheng(a,b);
  for i:=la downto 1 do write(a[i]);
end.[/size]

回复列表 (共4个回复)

沙发

这是高精度乘法的程序:
(因为程序没有判错功能,请不要输入非数字字符)
VAR
  la, lb, i, j, k, d, v, qs: INTEGER;
  a, b: ARRAY[1..127] OF INTEGER;
  c: ARRAY[1..254] OF INTEGER;
  s1, s2: STRING[127];
BEGIN
    READLN(s1);
    READLN(s2);
    la := LENGTH(s1); lb := LENGTH(s2);
    FOR i:=1 TO la DO VAL(COPY(s1, la + 1 - i, 1), a[i], k);
    FOR i:=1 TO lb DO VAL(COPY(s2, lb + 1 - i, 1), b[i], k);
    FOR i:=1 TO la DO BEGIN
        FOR j:=1 TO lb DO BEGIN
            d := a[i] * b[j]; v := i + j - 1;
            c[v] := c[v] + d MOD 10;
            c[v + 1] := c[v + 1] + c[v] DIV 10 + d DIV 10;
            c[v] := c[v] MOD 10;
        END;
    END;
    IF c[la + lb] = 0 THEN qs := la + lb - 1 ELSE qs := la + lb;
    WRITE(s1, '*', s2, '=');
    FOR i:=qs DOWNTO 1 DO WRITE(c[i]);
    READLN;
END.

板凳

procedure cheng(var a:numtype; b:numtype);
 var k,l,j,m:integer;
  begin
   c[1]:=0;m:=-1;
   if la<lb then la:=lb;
   for j:=1 to la do
    begin
     k:=0;m:=m+1;
     repeat
      k:=k+1;
      inc(c[k+m],a[j]*b[k]);
      inc(c[k+1+m],c[k+m] div 10);
      c[k+m]:=c[k+m] mod 10;
     until k=la;
    end;
    la:=la+lb;
    if c[la]=0 then dec(la);
    a:=c;
  end;

3 楼

楼主也太不公平了。
为什么我给你这么好的程序才加20分?2楼的什么破玩意,程序的风格太差,反而加30分,这不是偏心吗?

4 楼

对不起了,帮你加上!

我来回复

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