在Pascal中将分数转换为十进制

时间:2016-11-10 20:39:05

标签: pascal freepascal

我正在尝试将小数转换为十进制,括号中的重复小数位数最少。它应该是这样的:

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.

1 个答案:

答案 0 :(得分:2)

 if remainder = (remainder*10 mod m)

行仅检查一位数重复。您需要检查多个重复数字长度。显然,100/7被添加到练习中。