【问题标题】:Inverse factorial loop with PHP使用 PHP 的逆阶乘循环
【发布时间】:2014-01-20 01:13:40
【问题描述】:

我觉得无聊,创建这个脚本的唯一目的就是练习循环。我正在尝试使用阶乘数字,例如479001600,它是 12 的阶乘!我将它输入到循环中以查找 479001600 的阶乘是什么数字。使用技术479001600/2 -> 239500800/3 -> 79833600/4 ...-> previous_int/n+1 我想出了下面的代码,它只能工作到 12 点!但在 13 日失败!向前:

<?php

    function inv($int){

        $j=2;

        for($i=0;$i<$j;$i++){

            $prod = $int/$j;

            if($prod !== 1){
                $int = $prod;
                echo $prod. "<br>";
                $j++;
            } elseif($prod == 1) {
                return $j;
            }

        }

    }

    echo inv(6227020800);  // 13!


?>

当我尝试将 6227020800 计算为 13 时!我得到以下输出:

3113510400 1037836800 259459200 51891840 8648640 1235520 154440 17160 1716 156 13 1 0.071428571428571 0.0047619047619048 0.00029761904761905 1.750700280112E-5 9.7261126672891E-7 5.1190066669943E-8 2.5595033334971E-9 1.2188111111891E-10 ...ETC

即使它通过循环除法得到整数 1,它仍然忽略 if 语句。有什么我做错了吗?任何帮助将不胜感激,此外,我想避免使用 gmp_ 函数。

【问题讨论】:

  • 我刚刚试了一下,效果很好。
  • $prod !== 1(不相同)替换为$prod != 1(不相等)。
  • “它可以在我的机器上运行”:)
  • @SharanyaDutta 谢谢。这似乎有效,为什么失败比较成功?

标签: php loops for-loop factorial inverse


【解决方案1】:

这是因为 1 和 0.071428571428571 不是同一个类型。

您的比较运算符!== 检查值是否相同,并且由于它们属于不同类型,因此检查失败。亲眼看看,试试这个:

  echo gettype(1);
  echo gettype(0.12);

【讨论】:

  • 这不重要吗,因为函数应该 return 并因此在它到达任何浮点数之前结束?
  • 它不应该到达它,并且在我使用该代码的测试中没有,但由于某种原因在他的机器上它可以。此外,该比较运算符似乎没有按照他的预期进行(看起来这个人正在使用它,就像“如果这不等于那个”,而实际上它的意思是“如果这不等于那个”)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多