Translate:USACO/fracdec

12 篇文章 0 订阅
4 篇文章 0 订阅
 

Fractions to Decimals

分数化小数

译 by tim green



目录

[编辑] 描述

写一个程序,输入一个形如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.4
1/7 = 0.(142857)
2/2 = 1.0
3/8 = 0.375
45/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)
 
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.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值