pascal里的分数化小数

来源:百度知道 编辑:UC知道 时间:2024/06/23 18:29:49
program Project1;

var
n,d,d1,yu,yu1,n2,n5,num,i:longint;

begin
assign(input,'a.in');
reset(input);
assign(output,'a.out') ;
rewrite(output);
readln(n,d);
write(n div d,'.');
yu:=n mod d;
if yu=0 then write(0)
else begin
n5:=0; n2:=0; d1:=d;
while d1 mod 2=0 do begin
inc(n2);
d1:= d1 div 2;
end;
while d1 mod 5=0 do begin
inc(n5);
d1:= d1 div 5;
end;
num:=(n2+n5+abs(n2-n5))div 2;
for i:=1 to num do begin
write(yu*10 div d);
yu:=yu *10 mod d;
end;
if yu<>0 then
begin
yu1:=yu;
write('(');
repeat
write(yu1*10 div d);
yu1:=yu1 * 10 mod d;
until yu1=yu;
write(')');
end;
end;

while d1 mod 2=0 do begin
inc(n2);
d1:= d1 div 2;
end;
是指算出d1包含了多少个因子2,即可以整除2除多少次。

while d1 mod 5=0 do begin
inc(n5);
d1:= d1 div 5;
end;
是指算出d1含有多少个因子5,即可以整除5多少次。
num:=(n2+n5+abs(n2-n5))div 2;
是估算该分数应该小数点后多少位。
for i:=1 to num do begin
write(yu*10 div d);
yu:=yu *10 mod d;
end;
是输出小数部分。

因为2*5=10,n2为含2的个数,n5为含5的个数,
n2与n5相同的部分就是有多少个10,所以当n2=n5时,
(n2+n5+abs(n2-n5))div 2 就为分母中含有多少个10,
当n2<>n5时,如420,n2=2,n5=1,
(n2+n5+abs(n2-n5))div 2=2,就相当于把分母移动成x.xxxx的形式。
(只存在个位)

不只到