在 Pascal 中将分数转换为小数
Convert fraction to decimal in Pascal
我正在尝试将分数转换为小数,括号中的重复小数位数最少。它应该是这样的:
对于 n=100, m=5
输出应该是 20
对于 n=184, m=5
输出应该是 36.8
对于 n=1, m=3
输出应该是 0.(3)
对于 n=11, m=24
输出应该是 0.458(3)
对于 n=100, m=7
输出应该是 14.(285714)
我的程序在最后一部分 (100/7) 上失败。我究竟做错了什么?有人可以帮助我吗?
这是我的代码:
Program fraction2decimal(output);
var n,m,remainder: integer;
begin
read(n,m);
d := 0;
write (n div m);
remainder := n mod m;
if remainder <> 0 then write('.');
while remainder <> 0 do
begin
if remainder = (remainder*10 mod m) then write('(');
write (remainder*10 div m);
if remainder = (remainder*10 mod m) then begin
write(')');
break;
end;
end;
remainder := remainder*10 mod m;
end.
if remainder = (remainder*10 mod m)
line 只检查一个数字重复。您需要检查多个长度的重复数字。显然,100/7 就是为此添加到练习中的。
我正在尝试将分数转换为小数,括号中的重复小数位数最少。它应该是这样的:
对于 n=100, m=5
输出应该是 20
对于 n=184, m=5
输出应该是 36.8
对于 n=1, m=3
输出应该是 0.(3)
对于 n=11, m=24
输出应该是 0.458(3)
对于 n=100, m=7
输出应该是 14.(285714)
我的程序在最后一部分 (100/7) 上失败。我究竟做错了什么?有人可以帮助我吗?
这是我的代码:
Program fraction2decimal(output);
var n,m,remainder: integer;
begin
read(n,m);
d := 0;
write (n div m);
remainder := n mod m;
if remainder <> 0 then write('.');
while remainder <> 0 do
begin
if remainder = (remainder*10 mod m) then write('(');
write (remainder*10 div m);
if remainder = (remainder*10 mod m) then begin
write(')');
break;
end;
end;
remainder := remainder*10 mod m;
end.
if remainder = (remainder*10 mod m)
line 只检查一个数字重复。您需要检查多个长度的重复数字。显然,100/7 就是为此添加到练习中的。