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了....
我感到很迷茫,希望各位牛人不吝指教,这是什么原因导致的,以及如何避免这种问题...
谢谢!