主题:这题我也不会 讲个方法 高精度乘法:(单精度与多精度)
yjxyangjiaxin
[专家分:50] 发布于 2008-07-06 10:59:00
帮我详细讲一下
高精度除法:
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个回复)
沙发
Mato完整版 [专家分:1270] 发布于 2008-07-06 12:17:00
高精度除法的:
a[i] := a[i] + k * 10; {上一位的余数k后面写上本位数}
k := a[i] MOD b; {求这次除法的余数}
a[i] := a[i] DIV b; {保留去掉余数的整数商}
后面的WHILE循环是去掉多余的零的。
3 楼
Mato完整版 [专家分:1270] 发布于 2008-07-06 12:31:00
高精度乘法的:
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 楼
yjxyangjiaxin [专家分:50] 发布于 2008-07-09 14:29:00
谢谢你,
你对 冲刺NOIP 2008 有什么具体的想法吗?
我也想冲向NOIP
我来回复