【问题标题】:i want to sum all digit in a number我想将一个数字中的所有数字相加
【发布时间】:2016-04-06 18:35:31
【问题描述】:

我想在一个数字中添加所有数字,如果它是 11,22,那么我只想显示 11 或 22,否则我想将其设为单个数字。 示例 30=3+0=3 28=2+8=10=1+0=1

我刚刚做了一个代码,但它有一个错误 请帮忙。

<?php
$day = 17;  
$month = 8;   
$year = 1993;    

function sumday($day)   
{   
     if ($day == 11)    
    {   
        $sday = 11;   
    }    
    elseif ($day == 22)     
    {    
        $sday = 22;   
    }   
    elseif ($day == 29)    
    {   
        $sday = 11;   
    }    
    else    
        {   
             do {    
            $nday = $day . "";    
            $sday = 0;    
            for ($i = 0; $i < strlen($nday); ++$i)   
            {    
                $sday += $nday[$i];    
            }    
            while ($sday <=9);    

} 

return $sday;
}   

【问题讨论】:

  • 您的问题不清楚,这是我对您的文字解释的猜测。 eval.in/496369
  • while中的测试不是倒过来的吗?当结果大于 9 时,您想继续重复,不是吗?
  • 您需要在重复之前将$nday 设置为$sday

标签: php numbers add digit


【解决方案1】:

please refer to unnikked's answer,这是一个很好的答案。 这是完整的代码,结合 unnikked 的答案

<?php
$day = 17;  
$month = 8;   
$year = 1993;    

function sumday($day)   
{   
     if ($day == 11)    
    {   
        $sday = 11;   
    }    
    elseif ($day == 22)     
    {    
        $sday = 22;   
    }   
    elseif ($day == 29)    
    {   
        $sday = 11;   
    }    
    else{  
        $sday = $day;
        do {    
             $sday = $sday % 10 + floor($sday/10);
        } while ($sday >= 10); 
    }
return $sday;
}

?>

编辑:如果你想在while循环中返回11,22,33的总和,然后将条件放在while循环中而不是使用if else条件,这要简单得多:)

function sumday($day)   
{   
    $sday = $day;
    while ($sday >= 10 && $sday != 11 && $sday != 22 && $sday != 29){
        $sday = $sday % 10 + floor($sday/10);
    }
return $sday;
}

编辑:这是可以分割一天并总结它们的逻辑

function sumday($day)   
{   
    $sday = $day;
    $arrday = str_split($sday); // split the day into array
    $sumarrday = 0;
    for($i = 0; $i < strlen((string)$sday); $i++){
        $sumarrday = $sumarrday + $arrday[$i]; // sum the day from the array
    }
    $sday = $sumarrday; 
    // here you can modify the condition of while statement for your needs
    // for example, if you want to return 29 when 29 shows up, add this to your condition, && $sday != 29
    while ($sday >= 10){
        $sday = $sday % 10 + floor($sday/10);
    }   
    return $sday;
}

【讨论】:

  • 在do while循环中如果是11,22或33,是否可以返回总和?
  • 先生,如果我的 $day == 994 那么我也想退出循环并像 8885 一样显示 22> 8+8+8+5=29> 2+9=11 ;我想显示 11
  • 嗨,我认为 $day 只包含 2 位数字,因为它是“天”。哈哈。在这种情况下,您需要添加不同的逻辑。我稍后会帮助你,因为我现在还在工作:)。
  • 你 r rit 但我也想用相同的函数对年份求和。如果你有时间请帮助我。感谢您的快速帮助
  • 啊,我明白了,好吧,我会在下班后帮助你:)
【解决方案2】:

首先,我建议您学会分离函数执行的任务。

你要求对一个数字的位数求和,你可以先创建一个名为sum_digits的函数

<?php

function sum_digits($num) {
    if ($num < 10) 
        return $num;
    return $num % 10 + sum_digits(floor($num/10));
}

然后通过条件做任何你需要做的事情。

【讨论】:

  • 感谢您的帮助。我是 php 新手,刚开始学习。
  • 在do while循环中如果是11,22或33,是否可以返回总和?
【解决方案3】:

试试这个:

else {   
     $nday = $day . "";   //moved out wrom loop
     do {   
        $sday = 0;
        for ($i = 0; $i < strlen($nday); ++$i)   
        {    
            $sday += $nday[$i];    
        } 
        $nday = $sday . ""; // you forget this line   
        while ($sday <=9);    

} 

【讨论】:

  • 感谢您的帮助
猜你喜欢
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2014-05-15
  • 2011-11-09
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
相关资源
最近更新 更多