PHP数字总和公式

时间:2014-11-30 06:33:40

标签: php

你好,我是循环新手。

我需要一个公式来计算一个字符串中所有数字的总和。 例如:

123456

1+2+3+4+5+6 = 21

我找到了一个有效的代码,但我不知道它是如何工作的。

$number = 123456;
$sum = 0;
do {
    $sum += $number % 10; //WHAT IS THIS?
}
while ($number = (int) $number / 10); // HOW DOES IT WORK?
echo $sum;

我需要的是公式中的注释。 我们将解释循环是如何工作的,对我来说,我不知道我的代码是如何工作的。

我不知道$sum += $number % 10;做了什么,while ($number = (int) $number / 10);

任何可以帮助我的人?感谢!!!

4 个答案:

答案 0 :(得分:2)

您的代码说明:

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

第一个周期:数字123456由10& mod结果是6,这是最后一位数。然后它加入了总和。现在sum为0 + 6 = 6.这是由$sum += $number % 10;引起的。 在while中:因为我们添加了最后一个数字6所以我们需要从123456中删除6个。通过除以10得到12345.6但我们需要12345.这里(int)用于将12345.6转换为12345。

第二个周期:这个数字现在是12345.它再次由10&得到5.所以现在总和是6 + 5 = 11。 同时:12345再次除以10&将$number转换为1234. 依此类推

循环将持续到$number > 0

循环周期中的数字转换:

  • 在第一个周期中,数字将转换为123456 to 12345 & sum is 0 + 6 = 6
  • 在第二个周期中,数字将转换为12345 to 123 & sum is 6 + 5 = 11
  • 在第三个周期中,数字将转换为1234 to 123 & sum is 11 + 4 = 15
  • 在第四个周期中,数字转换为123 to 12 & sum is 15 + 3 = 18
  • 在第五个周期中,数字将被转换为12 to 1 & sum is 18 + 2 = 20
  • 在第六个周期中,数字被转换为1 to 0 & sum is 20 + 1 = 21& loop已结束。因为这个数字现在是0& while()未通过该条件。 enter image description here

答案 1 :(得分:2)

我有点怀疑回答你的问题,因为我认为模数运算符可能是编程语言中最棒的小东西之一,但我再次获得数学学位,所以我可能有点这方面有偏见。

以下是基础知识:

当您将数字除以另一个数字时,有时会得到所谓的余数。如,

8/2 = 4,没有余数 - 但是:

8/3 = 2,余数2因为2 * 3 + 2 = 8。

基本上$number % 10正在检查的是“当我除以10时,这个数字的余数是多少?”,答案是,123456的第一轮'是6,因为10 * 12345 + 6 = 123456. while循环中发生的事情是将数字除以10,使123456变为12345.6,整数强制类型设置$number等于12345.它经历相同的操作 - 当我除以10时,12345的剩余部分是多少? 5,因为1234 * 10 + 5 = 12345,它将该数字加到运行总和上。

虽然如果我看到一个学生把这个交给我,我会马上知道事情已经发生了。对于没有对数学有很好的理解或对编码有很好的理解的编码中的任何人来说,模数运算有时会很困难,因此对于那些初学者来说,这样的答案就像这样,我不确定我会相信他们。

希望能回答你关于代码工作原理的问题。

修改

以下是您发布的代码中发生的情况,而不使用大部分PHP语法:

  1. 设置$sum = 0;$number = 123456;
  2. 使用10获得123456的模数,即除以10时123456的剩余部分是多少? 6.
  3. 求和$sum的当前值和上述模数运算的结果。 $sum目前设置为0,因此0 + 6 = 6. $sum现在等于6.
  4. $number的值设置为$number当前值的整数值,除以10.自$number = 123456,123456/10 - 12345.6,整数部分是12345,所以$number = 12345
  5. 使用上面设置的$number的新值重复步骤2-4。

答案 2 :(得分:0)

//就这么简单

// 9位数字带有值

//以9为模,在0的情况下将0转换为9

$ nr = 5882;

$ ds = $ nr%9;

if($ ds == 0)$ ds = 9;

回显$ ds;

答案 3 :(得分:-1)

array_sum(str_split('123456'));