主题:怎么写高精除法
sunnyfish
[专家分:250] 发布于 2005-06-18 18:46:00
怎么写高精除法,请加注释,谢谢
回复列表 (共23个回复)
11 楼
davidw017 [专家分:4170] 发布于 2005-07-07 15:46:00
这应该是模拟数学运算法,你把这个过程想成一个除法竖式的计算过程。
M: 除数的位数
P: 除数
1) 取被除数的前 M 位 = N
2) 判断 N > P? 如果大于,把 N / P 的结果取整放到结果数组 A 中,如果不大于,多取一位,重复 2,直到 N > P
3) N - P * A(此次的结果), 得出剩下的余数
4) 从被除数上弄下一位,重复 2) 直到余数为 0
12 楼
zqnhlm [专家分:780] 发布于 2005-07-09 21:41:00
DIM a AS INTEGER
DIM b AS INTEGER
DIM n AS INTEGER
DIM jg AS STRING
DIM s AS INTEGER
DIM ys AS INTEGER
DIM m AS INTEGER
DIM i AS INTEGER
m = 0
a: INPUT "a,b,n?", a, b, n “a是被除数,b是除数,n是保留的有效位数”
s = a \ b
IF s = 0 THEN
jg = "0."
ys = a MOD b
a = ys * 10
s = a \ b
DO WHILE s = 0
jg = jg + "0"
a = ys * 10
s = a \ b
ys = a MOD b
LOOP
GOTO o
ELSE
jg = RTRIM$(LTRIM$(STR$(s)))
m = LEN(jg)
jg = jg + "."
a = (a MOD b) * 10
o: FOR i = 1 TO n - m
ys = a MOD b
s = a \ b
jg = jg + RTRIM$(LTRIM$(STR$(s)))
a = ys * 10
NEXT i
END IF
PRINT jg
END
用最简单的QB编的,本人是个职高生刚学QB不久,所以写的有些乱,请谅解!
13 楼
sunnyfish [专家分:250] 发布于 2005-07-10 13:11:00
哦,对,是用字符串和整数数组相互转换然后再解的!
但是还是请讲一下啊,我还是不懂啊!
14 楼
eastcowboy [专家分:25370] 发布于 2005-07-10 15:40:00
除法就是移位减法。
其过程跟小学的时候学的竖式除法差不多。
15 楼
xpycc [专家分:410] 发布于 2005-07-12 13:54:00
type
unmtype=record
n:array[1..7777]of longint;
p:longint;
end;
var
c,s:unmtype;
j,n:longint;
procedure plus(var a:unmtype;b:unmtype); {加法}
var
i,x:longint;
begin
if a.p>=b.p
then x:=a.p
else x:=b.p;
for i:=1 to x do
begin
a.n[i]:=a.n[i]+b.n[i];
a.n[i+1]:=a.n[i+1]+a.n[i] div 10;
a.n[i]:=a.n[i] mod 10;
end;
while a.n[a.p+1]<>0 do
a.p:=a.p+1;
end;
procedure multiply(var a:unmtype;b:longint); {乘法}
var
i:longint;
begin
a.n[1]:=a.n[1]*b;
for i:=2 to a.p do
begin
a.n[i]:=a.n[i]*b;
a.n[i]:=a.n[i]+a.n[i-1] div 10;
a.n[i-1]:=a.n[i-1] mod 10;
end;
while a.n[a.p]>=10 do
begin
a.p:=a.p+1;
a.n[a.p]:=a.n[a.p-1] div 10;
a.n[a.p-1]:=a.n[a.p-1] mod 10;
end;
end;
{减法上同加法,除法上同乘法}
16 楼
sunnyfish [专家分:250] 发布于 2005-07-13 15:45:00
这是pascal啊,我看不懂啊!
我的问题是,比如,一个100位的数字和99位数字相除,除过后被除数下一位的进位问题怎么解决,还有小数点问题怎么解决!
感谢大家的关心!
17 楼
iRabbit [专家分:60] 发布于 2005-07-15 22:51:00
试商法
需要提前写一个高精度乘法
18 楼
xiaokang [专家分:50] 发布于 2005-07-17 11:36:00
加法:(除法的按照这样的方法可写出)
program gaojingduplus;
type num=array [1..500] of integer;
var a,b:num;
s:string;
begin
readln(s);{读取数据}
len:=length(s);{数据长度}
a[i]:=b[i]+a[i];{各个位上的数相加}
a[i+1]:=a[i] div 10;{进位}
a[i]:=a[i] mod 10;
if a[i+1]<>0 then do
begin
len:=len+1;{判断数据长度}
end;
end.
我是新手,如有错误,恳请指正!
19 楼
xiaokang [专家分:50] 发布于 2005-07-17 11:39:00
15楼的:
if a.p>=b.p
then x:=a.p
else x:=b.p;
什么意思??
20 楼
xiaokang [专家分:50] 发布于 2005-07-17 11:51:00
15楼的:
你的程序怎么没有输入呀?
我来回复