你好,我是循环新手。
我需要一个公式来计算一个字符串中所有数字的总和。 例如:
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);
任何可以帮助我的人?感谢!!!
答案 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()
未通过该条件。
答案 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语法:
$sum = 0;
和$number = 123456;
$sum
的当前值和上述模数运算的结果。 $sum
目前设置为0,因此0 + 6 = 6. $sum
现在等于6. $number
的值设置为$number
当前值的整数值,除以10.自$number
= 123456,123456/10 - 12345.6,整数部分是12345,所以$number = 12345
$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'));