写一些与阶乘连接的代码(计算阶乘数的总和)我注意到了13!模数10等于4.
function fact($n)
{
if ($n == 0) return 1;
return $n * fact($n-1);
}
function sum_num($n)
{
$sum = 0;
while ($n > 0)
{
$sum = $sum + ($n % 10);
$n = floor($n/10);
}
return $sum;
}
$n = 13;
$buff = fact($n);
echo $n."! = ".$buff;
echo "<br>";
echo "Summ ".$n."! = ".sum_num($buff);
输出是:
13! = 6227020800
Summ 13! = 31
但是Summ应该是27.我开始搜索并发现第一步我得到的是4而不是0.
6227020800 % 10 = 4
我不明白为什么?
答案 0 :(得分:2)
6227020800需要33位。最siginficant位被截断,你得到的数字1932053504(模数10是4)。
对于任意精度数学,使用bc*
函数,例如bcmod(6227020800, 10)
。
答案 1 :(得分:0)
答案 2 :(得分:0)
我很确定,您使用的是32位版本。这里的最大值是4.294.967.296。