分数变小数 in pascal分数变小数(fch.pas) 【问题描述】 写出一个程序,接受一个以N/D的形式输入的分数,其中N为分子D为分母,输出它的小数形式.如果它的小数形式存在循环节,要将其用括号括
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/26 09:26:18
分数变小数 in pascal分数变小数(fch.pas) 【问题描述】 写出一个程序,接受一个以N/D的形式输入的分数,其中N为分子D为分母,输出它的小数形式.如果它的小数形式存在循环节,要将其用括号括
分数变小数 in pascal
分数变小数(fch.pas) 【问题描述】 写出一个程序,接受一个以N/D的形式输入的分数,其中N为分子D为分母,输出它的小数形式.如果它的小数形式存在循环节,要将其用括号括起来.例如:1/3=.33333...表示为.(3),又如41/333=.123123123...表示为.(123).输入格式:(文件fch.in) 输入(,为整数且)的形式分数 输出格式:(文件fch.out) 输出分数的小数形式.样例:fch.in 1/3 fch.out 0.(3) 麻烦给个完整的程序
分数变小数 in pascal分数变小数(fch.pas) 【问题描述】 写出一个程序,接受一个以N/D的形式输入的分数,其中N为分子D为分母,输出它的小数形式.如果它的小数形式存在循环节,要将其用括号括
呵呵昨天刚在UC上刷过. 代码: program fch(input,output); var n,d,len:longint; zs,i,j,tot,g,m,z:longint; ok,xh:boolean; v:array[0..100000]of boolean; a:array[0..100000]of longint; function leng(x:longint):longint; var s:string; begin str(x,s);exit(length(s)); end; begin assign(input,'fch.in');reset(input); assign(output,'fch.out');rewrite(output); readln(n,d); zs:=n div d; m:=n mod d; write(zs,'.'); tot:=0; v[m]:=true; xh:=false; if m=0 then begin tot:=1; a[tot]:=0; ok:=true end else ok:=false; while not ok do begin inc(tot); a[tot]:=(m*10)div d; m:=(m*10)mod d; if m=0 then ok:=true; if not v[m] then v[m]:=true else begin xh:=true; z:=m*10 div d; for i:=1 to tot do if a[i]=z then begin g:=i; break; end; ok:=true; end; end; j:=leng(zs)+1; if xh then begin for i:=1 to g-1 do begin write(a[i]); if (i+j)mod 76=0 then writeln; end; write('('); for i:=g to tot do begin write(a[i]); if (i+j+1)mod 76=0 then writeln; end; write(')'); end else begin for i:=1 to tot do begin write(a[i]); if i mod 76=0 then writeln; end; end; writeln; close(input);close(output); end.
满意请采纳