求助!一道free pascal题
有限小数化分数输入一个小数(小数点后至多8位),将其化成分数,小数点后不会有多余的0。输入:1.5输出:3/2谢...
有限小数化分数
输入一个小数(小数点后至多8位),将其化成分数,小数点后不会有多余的0。
输入:1.5
输出:3/2
谢 展开
输入一个小数(小数点后至多8位),将其化成分数,小数点后不会有多余的0。
输入:1.5
输出:3/2
谢 展开
4个回答
展开全部
var st:string;
r,q:real;
i,l,t,j,fz,fm,i1:longint;
begin
readln(st);
val(st,r);
i:=1;
while st[i]<>'.' do
inc(i);
inc(i);
l:=length(st)-i+1;
t:=1;
for j:=1 to l do
t:=t*10;
q:=r*t;
fz:=trunc(q);
fm:=t;
if fz>fm then
begin
for i:=2 to fz-1 do
if fz mod i=0 then
if fm mod i=0 then
begin
fz:=fz div i;
fm:=fm div i
end
end
else
if fz<=fm then
for i1:=2 to fm-1 do
if fm mod i=0 then
if fz mod i=0 then
begin
fz:=fz div i;
fm:=fm div i
end;
writeln(fz,'/',fm)
end.
编得比较紧急,可能不是很完善,不过结果肯定是对的。
r,q:real;
i,l,t,j,fz,fm,i1:longint;
begin
readln(st);
val(st,r);
i:=1;
while st[i]<>'.' do
inc(i);
inc(i);
l:=length(st)-i+1;
t:=1;
for j:=1 to l do
t:=t*10;
q:=r*t;
fz:=trunc(q);
fm:=t;
if fz>fm then
begin
for i:=2 to fz-1 do
if fz mod i=0 then
if fm mod i=0 then
begin
fz:=fz div i;
fm:=fm div i
end
end
else
if fz<=fm then
for i1:=2 to fm-1 do
if fm mod i=0 then
if fz mod i=0 then
begin
fz:=fz div i;
fm:=fm div i
end;
writeln(fz,'/',fm)
end.
编得比较紧急,可能不是很完善,不过结果肯定是对的。
展开全部
直接用长除法
USACO上正好有这道题 自己去看题解
USACO上正好有这道题 自己去看题解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
根据他的小数点位*10^n
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询