通过递归添加数字将数字减少到单个数字

时间:2016-01-19 12:45:29

标签: php

如何通过递归添加其个别数字将数字减少为单个数字:

  

示例1:$n = 99999 >> 45 >> 9

     

示例2:$n = 444444 >> 24 >> 6

     

示例3:$n = 8888888888888885 >> 125 >> 8;

然后等于最后我们想得到一位数。

2 个答案:

答案 0 :(得分:4)

您可以将array_sumstr_split用于while循环,直到$n的最终值长度等于1。

$n = 4444;

while (strlen($n) > 1) {
    $n = array_sum(str_split($n));
}

var_dump($n);

如果没有array_sumstr_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到无穷大输入多少,它都会完美地减少它。希望这会有所帮助:)