如何通过递归添加其个别数字将数字减少为单个数字:
示例1:
$n = 99999 >> 45 >> 9
示例2:
$n = 444444 >> 24 >> 6
示例3:
$n = 8888888888888885 >> 125 >> 8;
然后等于最后我们想得到一位数。
答案 0 :(得分:4)
您可以将array_sum
和str_split
用于while
循环,直到$n
的最终值长度等于1。
$n = 4444;
while (strlen($n) > 1) {
$n = array_sum(str_split($n));
}
var_dump($n);
如果没有array_sum
和str_split
,您可以使用以下内容:
$n = '4444';
while (strlen($n) > 1) {
$s = 0;
for ($i = 0; $i < strlen($n); $i++) {
$s += $n[$i];
}
$n = (string) $s;
}
var_dump($n);
答案 1 :(得分:0)
您可以用一种更简单,更优雅的方式来计算它,让我尝试解释一下。例如,如果您有数字53,则可以将其除以9,而余数将是其减少的数字。不要问我如何解决这个问题,我只是在修补数字。因此,您可以使用模数(53%9 = 8!)(517%9 = 4!)。完美吧?几乎,如果数字是9的倍数(例如45),例如,如果您对9进行“模数化”,您将收到它的余数,即0,而我们期望9是因为45减至一位数字是9。所以您可以使快速简便的else if语句检查输出是否为0,如果输出为0,则仅返回9。完成!无论您从1到无穷大输入多少,它都会完美地减少它。希望这会有所帮助:)