【发布时间】:2017-01-25 22:43:29
【问题描述】:
我已经开发了以下代码来找出 100 到 1000 之间的所有 armstrong 数字,但由于某种原因没有按预期运行。
for($i=99;$i<1000;$i++){
$x = str_split($i);
$arm = 0;
foreach ($x as $n){
$arm = $arm + pow($n,3);
if ($arm == $i){
echo $i."\n";
}
}
}
代码检查 $i 的值与 $arm 的值,如果匹配,则打印 $i。这意味着 $i 是一个阿姆斯壮数。输出如下。
153
370
370
371
407
由于某种原因打印两次 370,但根据第一个循环,$i 将只保存一次 370 的值。那么为什么我得到两次 370?
提前感谢您的帮助。
【问题讨论】:
-
因为在
370你这样做:3^3 + 7^3已经等于370并且你在你的 foreach 循环中打印出数字。但是在下一次和最后一次迭代中将0^3添加到370仍然等于370并且您再次输出该数字。 -
是的。基本上,您需要将
if移动到 内部循环之后。