⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 close.pas

📁 PASCAL光盘资料PASCAL光盘资料PASCAL光盘资料
💻 PAS
字号:
{$N+,R-}
var m,n,time:longint;
    ch:char;
    r:extended;
    a,b,c,x,y,maxx,maxy,mina,minb,t:comp;
function gcd(x,y:comp):comp;
var z:comp;
begin
     while y>0 do
     begin
          z:=y;
          while x>=z do
          begin
               x:=x-z;
               z:=z+z
          end;
          while z>y do
          begin
               z:=z/2;
               if x>=z then x:=x-z
          end;
          z:=x;
          x:=y;
          y:=z
     end;
     gcd:=x
end;
function compdiv(x,y:comp):comp;
var z,b,t:comp;
begin
     z:=0; b:=1; t:=y;
     while x>=t do
     begin
          z:=z+b;
          b:=b+b;
          x:=x-t;
          t:=t+t
     end;
     while t>y do
     begin
          t:=t/2;
          b:=b/2;
          if x>=t then begin x:=x-t;z:=z+b end
     end;
     compdiv:=z
end;
begin
     time:=meml[$40:$6c];
     assign(input,'close.in');
     reset(input);
     assign(output,'close.out');
     rewrite(output);
     readln(m,n);
     r:=0; b:=1; a:=0;
     read(ch);
     while ch<>'.' do
     begin
          r:=r*10+ord(ch)-48;
          a:=r;
          read(ch)
     end;
     while not(eoln) do
     begin
          read(ch);
          b:=b*10;
          r:=r+(ord(ch)-48)/b;
          a:=a*10+ord(ch)-48
     end;
     close(input);
     c:=gcd(a,b);
     a:=a/c;
     b:=b/c;
     if (a<=m) and (b<=n) then begin writeln(a:0:0,'/',b:0:0);close(output);halt end;
     maxx:=compdiv(m*b,a);
     if maxx=0 then begin writeln(m,'/1');close(output); halt end;
     if maxx>n then maxx:=n;
     a:=a-trunc(r)*b;
     t:=a*maxx-trunc(a*maxx/b)*b;
     if t<b-t then mina:=t else mina:=b-t;
     minb:=maxx;
     x:=maxx;
     while x>1 do
     begin
          x:=x-1;
          t:=t-a;
          if t<0 then t:=t+b;
          if t<b-t then c:=t else c:=b-t;
          if c<mina then
             if c*minb<=mina*x then begin mina:=c;minb:=x end
     end;
     mina:=trunc(minb*r);
     if (r+r)*minb>mina+mina+1 then mina:=mina+1;
     a:=a+b*trunc(r);
     x:=a*minb-mina*b+a*minb; y:=b*minb;
     c:=gcd(x,y);
     x:=x/c; y:=y/c;
     if (x<=m) and (y<=n)
        then begin writeln('TOO MANY'); close(output);halt end;
     writeln(mina/gcd(mina,minb):0:0,'/',minb/gcd(mina,minb):0:0);
     close(output);
     assign(output,'con');
     rewrite(output);
     writeln((meml[$40:$6c]-time)/18.2:0:2)
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -