我正在尝试将小数转换为十进制,括号中的重复小数位数最少。它应该是这样的:
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.
答案 0 :(得分:2)
if remainder = (remainder*10 mod m)
行仅检查一位数重复。您需要检查多个重复数字长度。显然,100/7被添加到练习中。