在我的一次大学竞赛期间,问题表明从文件中输入数字作为数字,然后简单地将其中的一半添加到自身。
这些数字是18位长的整数。我的大多数PHP输出与实际答案不同(大多数差异是2的幂)
注意:我还将浮点精度设置为30个位置,因此php不会将其打印为1.3434 ... E + 18,而是所有18位数。
继续我的比赛代码。
<?php
$file = fopen("100.in","r");
$inp = [];
fgets($file);
while(!feof($file))
$inp[] = (double)fgets($file);
fclose($file);
$i = 0;
while(isset($inp[$i])) {
$half = $inp[$i]/2;
$sum = $inp[$i] + $half;
echo "$sum <br>";
$i++;
}
?>
我已经使用文件中的值检查了输入数组值,并且在将值作为float传输或存储时没有错误。
此外,在我计算python中的答案(并将它们存储在一个文件中)并尝试将实际答案读作数字之后,php打印的数字与我之前计算的数字相同而不是我从文件。
有人可以告诉我我的代码有什么问题,或者是php的问题。还有我如何纠正它。
您可以看到调试文件here
编辑:如果你看到调试文件,你可以清楚地看到问题与大数字无关,因为代码正在打印302309448458254344和1319763928349129856,这大于第一个值的4倍。