此扩展是 Philip Nelson 编写的基本计算器实用程序的 GNU 实现(作为库)的接口;因此得名。请注意,当您使用 ClaudiuS 编写的阶乘实现时,即使您尝试计算通常无法计算的数字(例如 2.5、-2 等)的阶乘,您也会获得结果。这是一个更安全的实现
<?php
/**
 * 计算给定数字的阶乘。
 * @param string|int $num
 * @throws InvalidArgumentException
 * @return string
 */
function bcfact($num)
{
 if (!filter_var($num, FILTER_VALIDATE_INT) || $num <= 0) {
 throw new InvalidArgumentException(sprintf('参数必须是自然数,给定的是 "%s".', $num));
 }
 for ($result = '1'; $num > 0; $num--) {
 $result = bcmul($result, $num);
 }
 return $result;
}
?>需要计算一些排列组合,发现 BC 扩展很棒,但在函数方面很差,所以在实现之前,这里有一个阶乘函数
<?php
/* BC 阶乘
 * n! = n * (n-1) * (n-2) .. 1 [例如 5! = 5 * 4 * 3 * 2 * 1 = 120]
 */
function bcfact($n){
 $factorial=$n;
 while (--$n>1) $factorial=bcmul($factorial,$n);
 return $factorial;
}
print bcfact(50); 
//30414093201713378043612608166064768844377641568960512000000000000
?>