除法???????(50分)

  • 主题发起人 主题发起人 yucy
  • 开始时间 开始时间
Y

yucy

Unregistered / Unconfirmed
GUEST, unregistred user!
问题:有一个被除数长达50位(只能用字符串表示),除数为3位[例如:'900'].
目的:想要得到每次除后的商、余数,然后再用商被['900']除再次得到商、余数,该过程一
直循环到除不尽为止。最终将每次的余数各形成一个串。
 
str:= //50位数字的字符串
ssh,sys:string;
stemp:=str;
ssh:='';
sys:='';
while length(stemp)>8do
begin
sPart:=copy(str,1,8);
ssh:=ssh + inttostr(strtoint(sPart)/900);
sys:=inttostr(strtoint(spart) mod 900);
stemp := sys+copy(stemp,9,length(stemp)-8);
end;
ssh:= ssh + inttostr(strtoint(stemp) / 900);
sys:= inttostr(strtoint(stemp) mod 900);
方法是,先取8位除900,得到的商保留,余数+后42位,继续除,
得到商,与前面的商合并,余数继续,.......
这样得到的最终的余数便是第一次的余数,而合并得到的商串便是第一次的商
在对商如此操作,变得到第二个余数,............
 
我做过 100 位的加减乘除, (当然不固定也可以),要不要例子? 发信到 SuperMMX@263.net, 如果你要的话.
 
Support mitsukow!
 
题意不是很清楚,我按照自己的理解编了个例子如下:
//该函数在Delphi4 up3 + Win98 SE 环境下调试通过(未严格测试)。
//返回值为累计余数串(除到商为零止)
function LongStrDiv(const DidStr{被除数串},DivStr{除数串}:string):string;
procedure GetRemainderStr(DidStr{被除数串}:string;const DivStr{除数串}:string;
var QuotientStr{商数串},RemainderStr{累计余数串}:string);
const
MAX_Value=4294967295 div 10 -1;
var
DividendSect,Divisor,
QuotientInt,RemainderInt,
I :Integer;
PDid :PChar;
begin
Divisor:=StrToInt(DivStr);
if (DiviSor=0) or(DidStr='') then
Abort;
DividendSect:=0;
PDid:=PChar(DidStr);
QuotientStr:='';
while PDid^<>''do begin
while (DividendSect<=MAX_Value)and(PDid^<>'')do
begin
DividendSect:=DividendSect*10+Ord(PDid^)-Ord('0');
Inc(PDid);
end;
asm
MOV EAX,DividendSect
XOR EDX,EDX
MOV ECX,Divisor
DIV ECX
MOV QuotientInt,EAX
MOV RemainderInt,EDX
MOV DividendSect,EDX
end;
if (QuotientInt<>0) or (QuotientStr<>'') then
QuotientStr:=QuotientStr+IntToStr(QuotientInt);
end;
RemainderStr:=RemainderStr+IntToStr(RemainderInt);
end;

var
QuotientStr{商数串}:string;
begin
GetRemainderStr(DidStr,DivStr,QuotientStr,Result);
while QuotientStr<>''do
begin
GetRemainderStr(QuotientStr,DivStr,QuotientStr,Result);
end;
end;
 
请主人继续或结束!
 
万分的抱歉,由于本人很私人的问题这么长时间没有上来
为了表达我的歉意,给mitsukow=100分 、敏哥=50分 、SuperMMX=50分
请分坛主: DNChen, 分坛主: cAkk 从本人的分数中再取150分。
 
接受答案了.
 
后退
顶部