使用递归将数字减少到个位数
Reduce number to single digit using recurssion
$result = reduce($number);
function reduce($number) {
$new_number = 0;
if($number < 10) {
return $number;
}
$q = floor($number / 10 );
$r = $number % 10;
$new_number = $q + $r;
if($new_number <= 9) {
return $new_number;
}
else {
reduce($new_number);
}
}
我想按位数求和
例如,如果我传递 10,它应该 return 1+0 = 1
如果我通过 10
这有效
但是当我通过 100 时不工作。
这应该适合你:
只需将您的号码拆分成一个数组 str_split()
and then use array_sum()
即可将所有数字相加。
echo array_sum(str_split($number));
编辑:
如果你不想要校验和,而只想要一位数,你也不必写那么多代码。只需一遍又一遍地调用该函数,直到 array_sum()
等于或小于 9。
function reduceToOneSingleDigit($result) {
$result = str_split($result);
while(array_sum($result) > 9)
return reduceToOneSingleDigit(array_sum($result));
return array_sum($result);
}
echo reduceToOneSingleDigit(99);
您在结尾附近漏掉了 return
这个词。它应该是这样的:
return reduce($new_number);
代码太多,看下一篇
print sum(125); // 8
// 5 12
// 2 1
// 1 + ~>0
function findSum($num)
{
if($num == 0)
return 0;
return $num%10 + findSum(floor($num/10));
}
所以,即使 100000 或 000001 也会是 1,如你所愿,但如果参数是 0001000 就会有麻烦
$result = reduce($number);
function reduce($number) {
$new_number = 0;
if($number < 10) {
return $number;
}
$q = floor($number / 10 );
$r = $number % 10;
$new_number = $q + $r;
if($new_number <= 9) {
return $new_number;
}
else {
reduce($new_number);
}
}
我想按位数求和
例如,如果我传递 10,它应该 return 1+0 = 1
如果我通过 10
这有效
但是当我通过 100 时不工作。
这应该适合你:
只需将您的号码拆分成一个数组 str_split()
and then use array_sum()
即可将所有数字相加。
echo array_sum(str_split($number));
编辑:
如果你不想要校验和,而只想要一位数,你也不必写那么多代码。只需一遍又一遍地调用该函数,直到 array_sum()
等于或小于 9。
function reduceToOneSingleDigit($result) {
$result = str_split($result);
while(array_sum($result) > 9)
return reduceToOneSingleDigit(array_sum($result));
return array_sum($result);
}
echo reduceToOneSingleDigit(99);
您在结尾附近漏掉了 return
这个词。它应该是这样的:
return reduce($new_number);
代码太多,看下一篇
print sum(125); // 8
// 5 12
// 2 1
// 1 + ~>0
function findSum($num)
{
if($num == 0)
return 0;
return $num%10 + findSum(floor($num/10));
}
所以,即使 100000 或 000001 也会是 1,如你所愿,但如果参数是 0001000 就会有麻烦