2017-04-19 110 views
-9
<?php 

$val = 999; 
$sum = 0; 
while($val){ 
    $sum += $val % 10; 
    $val = $val/10; 
} 
echo $sum; 

?> 

请帮我解释一下上面的代码, 为什么$ sum总和$ val的所有数字?其余部分为%你能帮我解释一下这段代码吗

+1

你从哪里得到的代码?家庭作业? –

+0

结果是27 –

+0

研究代码,我相信你会弄明白的。这都是非常标准的,唯一可能会引起你注意的是模运算符'%',但你可以在手册中找到你需要的所有文档,http://php.net/manual/en/language .operators.arithmetic.php – Qirel

回答

3

所以你的代码是;

<?php 

    $val = 999; 
    $sum = 0; 
    while($val){ 
    $sum += $val % 10; 
    $val = $val/10; 
    } 
    echo $sum; 
?> 

现在来while while循环;

      Iteration 1  Iteration 2  Iteration 3 
while($val){   |while(999){ |while(99){  |while(9){ 
    $sum += $val % 10; |$sum +=999%10; |$sum +=99%10; | $sum+=9%10; 
    $val = $val/10; |$val=999/10; |$val=99/10; | $val=9/10; 
    }      |}    |}    |} 
         |$sum=9;  |$sum=9+9=18 |$sum=18+9=27 
         | $val=99  | $val=9  |$val=0 

现在$ val是0;所以循环将退出;

echo $sum 

将打印27

+0

这是一个很好的代码来读取。有助于理解它 感谢您的解释 –

+0

非常好的解释...良好的工作 –

0

%。

所以你通过$ val循环,这不是一个数组,所以它会循环999和99和9.因此,$ sum是总和9%10的剩余部分,每次9。

所以对于每个数字(9 9 9),余数为9,以便你的结果将是27.

代码$val/10是实际的除法,这使得每个环路的数量999由10 diveded,所以首先循环999/10 = 99,第二个循环99/10 = 9,第三个循环结果为0.这就是$ val的数值如何下降,循环结束。

+0

感谢simos为你解释一个问题。在$ val%之后10为什么必须/由10 –

0

@Wawan Sumardi试图理解下面的执行步骤:

<?php 
$val = 999; 
$sum = 0; 

第1步

while($val){ //$val = 999, while condition is true 
    $sum += $val % 10; //$sum = 9 as % operator give you the remainder 
    $val = $val/10; //this/only for removing digit one by one to your $val means the current digit has been added in $sum now we don't have to add current digit again so your $val will be like 999, 99, 9, 0 this only because you want sum all the digits so it is needed this is the logic 
} 

步骤2

while($val){ //now $val = 99, again while condition is true 
    $sum += $val % 10; //again get 9 but the previous $sum = 9 so with += increment operator it will be added in $sum so now $sum = 18 
    $val = $val/10; //previous $val = 99 now $val = 9 
} 

步骤3

while($val){ // now $val = 9, again while condition is true 
    $sum += $val % 10; //again 9 but the previous $sum = 18 so with += increment operator it will be added in $sum so now $sum = 27 
    $val = $val/10; //previous $val = 9 now $val = 0 
} 

步骤4

while($val){ // now as $val = 0, 0 is false value so now while condition is false so it break the while loop and below you will get $sum = 27 
    $sum += $val % 10; 
    $val = $val/10; 
} 

echo $sum; 

输出:27

相关问题