如何在PHP中找到一个数字的所有数字之和?
array_sum(str_split($number));
假设这个数字是正数(或者更准确地说,将$number
转换成字符串只产生数字)。
Artefactos的方法显然是无与伦比的,但这里有一个版本可以手动实现:
$number = 1234567890;
$sum = 0;
do {
$sum += $number % 10;
}
while ($number = (int) ($number / 10));
这实际上比 Artefactos 的方法更快(至少对于1234567890
),因为它可以节省两个函数调用。
另一种方式,不那么快,也不是单行简单。
<?php
$n = 123;
$nstr = $n . "";
$sum = 0;
for ($i = 0; $i < strlen($nstr); ++$i)
{
$sum += $nstr[$i];
}
echo $sum;
?>
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。
<?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);
?>
<?php
$num = 525;
$sum = 0;
while ($num > 0)
{
$sum= $sum + ($num % 10);
$num= $num / 10;
}
echo "Summation=" . $sum;
?>
0
的数字后变成引用。尝试使用while ($num|0)
。顺便说一下:for(;$num|0;$num/=10)$sum+=$num%10;
- Titus// 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;
<?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
如果对正则表达式感兴趣:
array_sum(preg_split("//", $number));
<?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";
?>