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

📄 change1.pas

📁 无限循环小数转换成分数 无限循环小数转换成分数
💻 PAS
字号:
program change;
var intzi,unloopzi,zi,mu,temp:longint;
    looplen,unlooplen:byte;
    str:string;
    flag:boolean;

function divisor(m,n:longint):longint;
  var a,b,t:longint;
  begin
    a:=m;b:=n;
    repeat
      if a<b then begin
        t:=a;a:=b;b:=t;end;
      a:=a-b;
    until a=0;
    divisor:=b;
    end;

procedure main1;
  var i,t:byte;ok:integer;
  begin
    t:=pos('.',str);
    val(copy(str,1,t-1),intzi,ok);
    delete(str,1,t);
    unlooplen:=length(str);
    val(str,unloopzi,ok);
    str:='1';
    for i:=1 to unlooplen do str:=str+'0';
    val(str,mu,ok);
    zi:=intzi*mu+unloopzi;
    temp:=divisor(zi,mu);
    zi:=zi div temp;
    mu:=mu div temp;
    writeln(zi,'/',mu);
    end;

procedure main2;
  var i,t:byte;ok:integer;
  begin
    if pos(')',str)<length(str) then begin
      writeln('You have wronged your writing,I have correct it!');
      if pos(')',str)<>0 then delete(str,pos(')',str)+1,length(str)-pos(')',str))
                         else str:=str+')';
      end;
    t:=pos('.',str);
    val(copy(str,1,t-1),intzi,ok);
    delete(str,1,t);
    t:=pos('(',str);unlooplen:=t-1;
    val(copy(str,1,t-1),unloopzi,ok);
    delete(str,1,t);
    t:=length(str);
    looplen:=t-1;
    delete(str,t,1);
    val(str,zi,ok);
    str:='';
    for i:=1 to looplen do str:=str+'9';
    val(str,mu,ok);unloopzi:=unloopzi*mu;
    for i:=1 to unlooplen do str:=str+'0';
    val(str,mu,ok);intzi:=intzi*mu;
    zi:=zi+intzi+unloopzi;
    temp:=divisor(zi,mu);
    zi:=zi div temp;
    mu:=mu div temp;
    writeln(zi,'/',mu);
    end;

procedure judge;
  var strt:string;
  begin
    flag:=false;
    strt:=str;
    delete(strt,pos('.',strt),1);
    delete(strt,pos('(',strt),1);
    delete(strt,pos(')',strt),1);
    if (pos('.',strt)<>0) or (pos('(',strt)<>0) or (pos(')',strt)<>0) then flag:=true;
    end;

begin
  writeln('Please input a number with using brackets to show where the loops is:');
  readln(str);
  judge;
  if ((pos('.',str)=0) and ((pos('(',str)<>0) or (pos(')',str)<>0)))
  or ((pos('(',str)=0) and (pos(')',str)<>0))
  or flag
  then writeln('Are you kidding me?')
  else if pos('.',str)=0
       then writeln('foolish ',str)
       else if pos('(',str)=0
            then main1
            else main2;
  readln;
  end.

⌨️ 快捷键说明

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