回 帖 发 新 帖 刷新版面

主题:题目:数组

帮帮忙,各位师哥师姐们!!!![em2][em18]
分数变小数(FTOR)
提交文件名:FTOR.PAS
问题描述:
    编写一个程序,接受一个以N & D的形式输入的分数,其中N为分子,D为分母,N和D都是正整数,输出它的小数形式。如果它的小数形式存在循环节,要将其用括号括起来。
    0 <= N <= 65535,0 < D <= 65535,设运算结果小数点后最多保留100位。
输入输出样例:
INPUT   : 1/3
OUTPUT :0.(3)

INPUT   :22/5
OUTPUT :4.4

INPUT   :45/56
OUTPUT :0.803(571428)

回复列表 (共8个回复)

沙发

  var
    t:string;
    i,j,k:integer;
    s,y:array [0..1000] of word;
    n,d:word;
begin
  readln(t);
  val(copy(t,1,pos('/',t)-1),n,i);
  val(copy(t,pos('/',t)+1,length(t)-pos('/',t)),d,i);
  i:=-1; repeat
    inc(i); s[i]:=n div d; y[i]:=n mod d;
    for j:=1 to i-1 do if (y[i]=y[j]) and (s[i]=s[j]) then break;
    if (i<>j) and (y[i]=y[j]) and (s[i]=s[j]) then break;
    n:=n mod d*10;
  until y[i]=0;
  write(s[0],'.');
  for k:=1 to j-1 do write(s[k]);
  if y[i]<>0 then begin
    write('(');
    for k:=j to i-1 do write(s[k]);
    write(')');
  end;
  readln;
end.

板凳

太太太.....感谢了
[em28][em28][em28][em28]

3 楼

var
    t:string;
    i,j,k:integer;
    s,y:array [0..1000] of word;
    n,d:word;
begin
  readln(t);
  val(copy(t,1,pos('/',t)-1),n,i);
  val(copy(t,pos('/',t)+1,length(t)-pos('/',t)),d,i);
  i:=-1; repeat
    inc(i); s[i]:=n div d; y[i]:=n mod d;
    for j:=1 to i-1 do if (y[i]=y[j]) and (s[i]=s[j]) then break;
    if (i<>j) and (y[i]=y[j]) and (s[i]=s[j]) then break;
    n:=n mod d*10;
  until y[i]=0;
  write(s[0],'.');
  for k:=1 to j-1 do write(s[k]);
  if y[i]<>0 then begin
    write('(');
    for k:=j to i-1 do write(s[k]);
    write(')');
  end;
  readln;
end.

4 楼

这题可以不开任何数组,原题是usaco的fracdec

5 楼

[求助]Eraser2000老师一道数组题目的疑惑hits:66

6 楼

恩,值得考虑一下!

7 楼

先用高精求,再用dp寻找循环节便可!

8 楼

首先说这题目用不到高精度,其次也用不到dp。
高精度还是一种实现方法,而dp就完全不靠谱了。
当然,这只是[b]个人认为[/b]。

我来回复

您尚未登录,请登录后再回复。点此登录或注册