讨论 / 问一个蛮怪异的问题!请高手指教
huizezlk 2009-08-20 07:33:00
点我顶贴 收藏 删除
这道题说实话蛮简单的,本质就是不断的判断各位是多少,然后乘了就加起来,但是我发现了个问题:一些实数类型的函数是不是有问题???

  就像本题的核心部分就是

     while n<>0 do

begin

t:=trunc(ln(n)/ln(2));

s:=s+trunc(exp(t*ln(k)));

n:=n-trunc(exp(t*ln(2)));

end;

write(s);

这样就完成了这道题,但是只过了7组,后来我就想是不是实型的函数有问题.于是乎,我把那些函数全换成直接算:  

     while n<>0 do

begin

t:=1; t1:=0;

while t<n do

begin

t:=t*2;

inc(t1);

end;

if t>n then

begin

t:=t div 2;

dec(t1);

end;

n:=n-t;

t:=1;

for i:=1 to t1 do

t:=t*k;

s:=s+t;

end;

write(s);

完全一样的意思,但是结果就不一样了,这次就对了....我不知道是怎么一回事,

测试结果1: 测试结果正确

测试结果2: 测试结果正确

测试结果3: 测试结果正确

测试结果4: 测试结果正确

测试结果5: 测试结果错误.错误结果为:435250258

正确结果应为:435250260

测试结果6: 测试结果错误.错误结果为:435841394

正确结果应为:435841398

测试结果7: 测试结果正确

测试结果8: 测试结果正确

测试结果9: 测试结果错误.错误结果为:2019422346

正确结果应为:2019422348

测试结果10: 测试结果正确

第二次就AC了....

我感到很迷茫,希望各位牛人不吝指教,这是什么原因导致的,以及如何避免这种问题...

谢谢!

#1 lohocla4dam@2009-08-20 07:33:00
回复 删除
数据溢出
查看更多回复
提交回复