Translate:USACO/fracdec

来源:互联网 发布:开机忘记密码 mac 编辑:程序博客网 时间:2024/06/18 18:19
 

Fractions to Decimals

分数化小数

译 by tim green



目录

  • 1 描述
  • 2 PROGRAM NAME
  • 3 INPUT FORMAT
  • 4 SAMPLE OUTPUT
  • 5 OUTPUT FORMAT
  • 6 SAMPLE OUTPUT

[编辑]描述

写一个程序,输入一个形如N/D的分数(N是分子,D是分母),输出它的小数形式。如果小数有循环节的话,把循环节放在一对圆括号中。

例如, 1/3 =0.33333333 写成0.(3), 41/333 = 0.123123123... 写成0.(123), 用xxx.0 等表示整数。典型的转化例子:

1/3 = 0.(3)22/5 = 4.41/7 = 0.(142857)2/2 = 1.03/8 = 0.37545/56 = 0.803(571428)

[编辑]PROGRAM NAME

fracdec

[编辑]INPUT FORMAT

单独的一行包括被空格分开的 N和D, 1 <= N,D <= 100000。

[编辑]SAMPLE OUTPUT

(file fracdec.in)

45 56

[编辑]OUTPUT FORMAT

按照上面规则计算出的小数表达式.如果结果长度大于76,每行输出76个字符.


[编辑]SAMPLE OUTPUT

(file fracdec.out)

0.803(571428)
来自"http://www.nocow.cn/index.php/Translate:USACO/fracdec"
 
var a,b:array[0..100000] of longint;v:array[0..100000] of boolean;s:string;n,m,i,j,k,sum,now:longint;begin assign(input,'fracdec.in'); assign(output,'fracdec.out'); reset(input); rewrite(output); readln(n,m); k:=n mod m; n:=n div m; b[k]:=1; str(n,s); now:=length(s); write(n,'.'); while k<>0 do  begin   k:=k*10; inc(a[0]); a[a[0]]:=k div m;   k:=k mod m; sum:=b[k]; if sum<>0 then break;   b[k]:=a[0]+1;  end; if a[0]=0 then writeln(0); if k=0 then  for i:=1 to a[0] do   begin    write(a[i]);    if (i+now+2) mod 76=0 then writeln;//fuck    end else  begin   for i:=1 to sum-1 do    if (i+now+2) mod 76=0 then    writeln(a[i])    else write(a[i]);   write('(');   for i:=sum to a[0] do    if (i+now+2) mod 76=0 then writeln(a[i])    else write(a[i]);   writeln(')');  end; close(input); close(output);end.