【问题标题】:Get the sum of digits in PHP获取PHP中的数字总和
【发布时间】:2020-04-21 07:57:06
【问题描述】:

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

【问题讨论】:

    标签: php string sum


    【解决方案1】:
    array_sum(str_split($number));
    

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

    【讨论】:

    • 谢谢,这简直太简单了!
    • 谢谢!越简单越好!如果您不知道一个数字是正数还是负数,您可以使用 abs() 函数使其始终为正数 array_sum(str_split(abs($number)));
    • 有趣的是,这在此处获得了 70 多票,在 php 手册页上却被 -40 see here 否决了
    • 它不仅比任何循环都短,而且速度更快:PHP 没有整数除法,因此循环解决方案必须在每次迭代中将剩余数字从 float 转换为 int。
    【解决方案2】:

    Artefactos 方法显然是无与伦比的,但这里有一个“手动”版本:

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

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

    【讨论】:

    • 如果 $number = "12345678901234567890";?
    • @ShaifulIslam 怎么样?
    【解决方案3】:

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

    <?php
    
        $n = 123;
        $nstr = $n . "";
    
        $sum = 0;
        for ($i = 0; $i < strlen($nstr); ++$i)
        {
            $sum += $nstr[$i];
        }
        echo $sum;
    
    ?>
    

    它还假设数字是正数。

    【讨论】:

    • @Frank Farmer Efficiency 不会在每次迭代中计算字符串长度:P
    • 是的,但这仍然可能比通过 str_split 构建整个数组要好。
    【解决方案4】:
    函数 addDigits($num) { if ($num % 9 == 0 && $num > 0) { 返回 9; } 别的 { 返回 $num % 9; } }

    只有 O(n)

    在 LeetCode 提交结果: 运行时间:4 毫秒,比添加数字的 PHP 在线提交的 92.86% 快。 内存使用量:14.3 MB,不到添加数字的 PHP 在线提交的 100.00%。

    【讨论】:

    • 这就是我一直在寻找的
    【解决方案5】:
    <?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

    【讨论】:

    • 您好!虽然这段代码可以解决问题,including an explanation 解决问题的方式和原因确实有助于提高帖子的质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
    【解决方案6】:

    试试下面的代码:

    <?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;
    【解决方案7】:

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

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

    【讨论】:

      【解决方案8】:

      假设您想找到一个数字的数字总和,比如 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";
           ?>
      

      【讨论】:

        【解决方案9】:
            <?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
        

        【讨论】:

          【解决方案10】:
          // 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 个浮点数
          【解决方案11】:

          一种获取数字总和的方法,但这是最慢的方法。

          $n=123;
          while(($n=$n-9)>9);
          echo "n: $n";
          

          【讨论】:

            【解决方案12】:
            <html>
            <head>
            <title>detail</title>
            </head>
            <body>
            <?php
            $n = 123;
            $sum=0; $n1=0;
            
              for ($i =0; $i<=strlen($n);$i++)
             {
            
              $n1=$n%10;
            
               $sum += $n1;
               $n=$n/10;
              }
             echo $sum;
            
             ?>
             </body>
            </html>
            

            【讨论】:

              【解决方案13】:

              这是代码..请试试这个

                 <?php 
                  $d=0;
                 $num=12345;
              
                 $temp=$num;
              
                 $sum=0;
              
                 while($temp>1)
              
                   {
                    $temp=$temp/10;
              
                      $d++;
                       }
              
                   echo "Digits Are : $d </br>";
              
                    for (;$num>1;)
              
                           {
                            $d=$num%10;
              
                           $num=$num/10;
              
                           $sum=$sum+$d;
              
                           }
              
                         echo "Sum of Digits is : $sum";
              
                 ?>
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2017-10-24
                • 1970-01-01
                • 2011-03-13
                • 2020-10-03
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多