我已经开发了以下代码来查找100到1000之间的所有阿姆斯特朗号码,但由于某种原因,其行为不符合预期。
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 ???
提前感谢您的帮助。
答案 0 :(得分:2)
你得到370两次是因为:
33 + 73 == 33 + 73 + 03 //27 + 343 == 27 + 343 + 0
在将所有内容添加到一起时,尝试在 foreach循环之后放置if语句:
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";
}
}