pascal问题 大牛进

来源:百度知道 编辑:UC知道 时间:2024/05/30 14:07:59
高手帮忙讲解下里面的精度是怎么回事啊
var ans,i:longint; a,b:real;
begin
read(a,b);
a:=a/100;
b:=b/100;
ans:=0;
i:=0;
while ans<1 do
begin
inc(i);
ans:=trunc(i*b)-trunc(i*a);
end;
writeln(i);
end.
只有60分
vijos p1041

直接用双长宽输出就行了,例:writeln(b-a:0:0);//这个可以查书,在输出那章肯定有

你这个很有可能是b和a的长度不一样长,导致相减的时候错误,有两种方法:
1:
改条件,while (ans<1)and(a不为空)and(b不为空) do
.............

2:
用数组做,像高精度那样。

用数组存储每一位然后按规则计算

不知道...我编pascal时也经常有精度问题存在...
不知道你这个是哪的题,看来像vijos上的按比例求人数那个题(很久不做了)。这是软件自身存在精度问题,这个不可避免(于是我就直接cheat),这个没办法避免。至于所谓+0.000000001之类的...我还不清楚为什么。

补充:果然是那道题...那我就没办法了,开始我也是精度上有问题,后来我做的很猥琐,分出了4种情况逐一求解,最后还是只能90分,但还是由于精度问题最后一个点总比答案小1,于是直接if m=5000 then m:=5001了。

想要我的源程序就给我发纸条吧。

program shfeng;
const m=1e-6;
var
p,q:double;
n:longint;
begin
readln(p,q);
p:=p/100;
q:=q/100;
n:=1;
if p<>0 then
while trunc(n/q+m)+1>trunc(n/p-m) do inc(n);
writeln(trunc(n/q+m)+1);
end.