您的代碼不包含輸入數字本身,因此只需將for循環中的條件從<
更改爲<=
(例如,
$input = 8;
$total_divisors = 0;
for($i = 1; $i <= $input; $i++) {
//^^ See here
if ($input % $i == 0) $total_divisors++;
}
print $total_divisors;
你的代碼之前所做的是:
| $input | $total_divisors | $i || for condition | if condition
($i <= $input) ($input % $i == 0)
------------------------------------------------------------------------------------------
0. iteration | 8 | 0 | 1 || - | -
1. iteration | 8 | 1 | 1 || 1 < 8 -> TRUE | 8 % 1 == 0 -> TRUE
2. iteration | 8 | 2 | 2 || 2 < 8 -> TRUE | 8 % 2 == 0 -> TRUE
3. iteration | 8 | 0 | 3 || 3 < 8 -> TRUE | 8 % 3 == 0 -> FALSE
4. iteration | 8 | 3 | 4 || 4 < 8 -> TRUE | 8 % 4 == 0 -> TRUE
5. iteration | 8 | 0 | 5 || 5 < 8 -> TRUE | 8 % 5 == 0 -> FALSE
6. iteration | 8 | 0 | 6 || 6 < 8 -> TRUE | 8 % 6 == 0 -> FALSE
7. iteration | 8 | 0 | 7 || 7 < 8 -> TRUE | 8 % 7 == 0 -> FALSE
8. iteration | 8 | 4 | 8 ||
8 < 8 -> FALSE | 8 % 8 == 0 -> TRUE
所以你可以在上面的例子中看到你從來沒有經歷過在你前面的代碼的8迭代去了。
https://3v4l.org/1HWno只有3以下的值divisiors '$ input'。 –