回 帖 发 新 帖 刷新版面

主题:这题我也不会  讲个方法   高精度乘法:(单精度与多精度)


帮我详细讲一下

高精度除法: 

procedure division(b:longint;var a:numbertype);
var
i,k:integer;
begin
k:=0;
for i:=len downto 1 do
begin
a[i]:=a[i]+k*10;
k:=a[i] mod b;
a[i]:=a[i] div b;
end;
while a[len]=0 do
len:=len-1;
end; 



高精度乘法:(单精度与多精度)
procedure multiply(b:longint;var a:numbertype);
var
i:integer;
begin
a[1]:=a[1]*b;
for i:=2 to len do
begin
a[i]:=a[i]*b;
a[i]:=a[i]+a[i-1] div 10;
a[i-1]:=a[i-1] mod 10;
end;
while a[len]>=10 do
begin
len:=len+1;
a[len]:=a[len-1] div 10;
a[len-1]:=a[len-1] mod 10;
end;
end;

回复列表 (共4个回复)

沙发

高精度除法的:
a[i] := a[i] + k * 10;   {上一位的余数k后面写上本位数}
k := a[i] MOD b;     {求这次除法的余数}
a[i] := a[i] DIV b;  {保留去掉余数的整数商}
后面的WHILE循环是去掉多余的零的。

板凳

高精度乘法呢

3 楼

高精度乘法的:
FOR i:=2 TO len DO BEGIN
a[i] := a[i] * b;                 {本位的积}
a[i] := a[i] + a[i - 1] DIV 10;   {本位积加上上位进位数}
a[i - 1] := a[i - 1] MOD 10;      {上位取个位}  
END;

WHILE a[len] >= 10 DO BEGIN       {如果最高位进位}
len := len + 1;                   {新建一位,存储进位数}
a[len] := a[len - 1] DIV 10;      {新建的那一位赋值为原来最高位的进位数}
a[len - 1] := a[len - 1] MOD 10;  {原来最高位取个位}
END;

4 楼


谢谢你,

你对  冲刺NOIP 2008  有什么具体的想法吗?

我也想冲向NOIP

我来回复

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