获取数字字符串中所有数字的总和

31

如何在PHP中找到一个数字的所有数字之和?

13个回答

118
array_sum(str_split($number));

假设这个数字是正数(或者更准确地说,将$number转换成字符串只产生数字)。


谢谢!越简单越好!如果您不知道一个数字是正数还是负数,您可以使用abs()函数使其始终为正数。array_sum(str_split(abs($number))); - imelgrat
有趣的是,这个帖子在这里得到了70多个赞,但在PHP手册页面上却被踩了-40个请看这里 - Manuel Mannhardt
它不仅比任何循环都要短,而且速度更快:PHP没有整数除法,因此循环解决方案必须在每次迭代中将剩余数字从浮点数转换为整数。 - Titus

13

Artefactos的方法显然是无与伦比的,但这里有一个版本可以手动实现:

$number = 1234567890;
$sum = 0;
do {
    $sum += $number % 10;
}
while ($number = (int) ($number / 10));

这实际上比 Artefactos 的方法更快(至少对于1234567890),因为它可以节省两个函数调用。


如果 $number = "12345678901234567890"; 会怎样? - Shaiful Islam
@ShaifulIslam 这个怎么样? - Adam
因为这个答案没有解释,所以出现了一个重复的问题。 - mickmackusa

4

另一种方式,不那么快,也不是单行简单。

<?php

    $n = 123;
    $nstr = $n . "";

    $sum = 0;
    for ($i = 0; $i < strlen($nstr); ++$i)
    {
        $sum += $nstr[$i];
    }
    echo $sum;

?>

它也假设这个数字是正数。

@Frank Farmer 在每次迭代中计算字符串长度会影响效率 :P - alex
没错,但这仍然比通过str_split构建整个数组要好。 - Frank Farmer

3
function addDigits($num) {
    // 如果数字能整除9且大于0,则返回9
    if ($num % 9 == 0 && $num > 0) {
        return 9;
    } else {
        // 否则,返回数字除以9的余数
        return $num % 9;
    }
}

仅使用O(n)

在LeetCode提交结果: 运行时间:4毫秒,快于92.86%的PHP在线提交的Add Digits。 内存使用:14.3 MB,少于100.00%的PHP在线提交的Add Digits。


1
<?php 
// PHP program to calculate the sum of digits 
function sum($num) { 
    $sum = 0; 
    for ($i = 0; $i < strlen($num); $i++){ 
        $sum += $num[$i]; 
    } 
    return $sum; 
} 

// Driver Code 
$num = "925"; 
echo sum($num); 
?> 

结果将会是 9+2+5 = 16。

你好!尽管这段代码可能解决了问题,但是包括一个解释关于它是如何解决问题的,会极大地帮助提高您的帖子质量,也可能导致更多点赞。记住,你的回答是为未来的读者而写的,而不仅仅是为现在提问的人。请[编辑]你的回答以添加解释,并指出限制和假设。 - Brian61354270

0
尝试以下代码:
<?php

$num = 525;
$sum = 0;

while ($num > 0)
{
    $sum= $sum + ($num % 10);
    $num= $num / 10;
}
echo "Summation=" . $sum;

?>

无限循环:$num将在第一个不是0的数字后变成引用。尝试使用while ($num|0)。顺便说一下:for(;$num|0;$num/=10)$sum+=$num%10; - Titus
这个答案缺少教育性的解释。 - mickmackusa

0
// math before code 

// base of digit sums is 9 

// the product of all numbers multiplied by 9 equals 9 as digit sum

$nr = 58821.5712; // any number

// Initiallization 

$d = array();

$d = explode(".",$nr); // cut decimal digits

$fl = strlen($d[1]); // count decimal digits

$pow = pow(10 ,$fl); // power up for integer

$nr = $nr * $pow; // make float become integer

// The Code

$ds = $nr % 9; // modulo of 9 

if($ds == 0) $ds=9; // cancel out zeros

echo $ds;

最多7位小数的浮点数 - stereoIII6

0
    <?php
echo"----Sum of digit using php----";
echo"<br/ >";
$num=98765;
$sum=0;
$rem=0;
for($i=0;$i<=$num;$i++)
{
$rem=$num%10;
$sum=$sum+$rem;
$num=$num/10;
}
echo "The sum of digit 98765 is ".$sum;
?>
-----------------Output-------------
----Sum of digit using php----
The sum of digit 98765 is 35

0

如果对正则表达式感兴趣:

array_sum(preg_split("//", $number));

-1
假设您想要找到一个数字的各位数字之和,比如2395,最简单的解决方案是先拆分数字并计算它们的总和,然后将所有数字连接成一个单一的数字。
<?php
    $number=2;
    $number1=3;
    $number2=9;
    $number3=5;
    $combine=$number.$number1.$number2.$number3;
    $sum=$number+$number1+$number2+$number3;
    echo "The sum of $combine is $sum";
     ?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接