我一直在阅读讨论代码,但不理解输出5位数字总和的语法。我以为C会从上至下,从左至右读取所有内容,因此%10和/ 10在语法上如何相加?
这是来自hackerrank的挑战,输入5位数字,并输出5位数字总和。
(CAR[\s\S]*?(?=\)))
样本输入10564 样本输出16
答案 0 :(得分:1)
总和不是“ % 10
和/10
语法上都”。
n % 10
是n
的最低有效(最右边)数字。
这就是添加到sum
中的内容。
然后n /= 10
(n = n / 10
)从n
处截去该数字,然后重复该过程。
您可以手动进行操作:
设置n = 12345
和sum = 0
。
12345
不为零,因此进入循环:
12345 % 10
是5
,所以sum += 5
就是5
。
12345 / 10
是1234
,所以n = 1234
。
现在,n
是1234
,不为零。
1234 % 10
是4
,所以sum += 4
就是9
。
1234 / 10
是123
,所以n = 123
。
123
不为零...
依次类推,直到n
变为零为止,这将只剩下一位数字。
答案 1 :(得分:0)
尽管编译器可以进行一些优化,以便您的代码可能会更改,但是C确实可以自上而下地处理您的代码。
while循环中发生的事情
sum += n % 10;
== sum = sum + n % 10;
首先,激活%
运算符,然后激活+
运算符。
因此,首先获取数字的最后一位有效数字,然后将其加总为结果,然后将其分配给sum
。
n/= 10;
中发生了同样的事情。首先,您将保存在n
中的数字相除,然后将结果存储在n
中。
希望它能回答您的问题。
答案 2 :(得分:0)
工作原理:
尽管n不为空,但您将除法n / 10的其余部分相加。 如果n = 10564: 在第一次迭代中,您得到4,即10564%10的结果。 然后,将10564除以10得到1056,4。 但是n是一个整数值,所以您得到n = 1056
通过执行相同的操作,您始终会获得n的单位并将其加到总和上。
答案 3 :(得分:0)
嗯,语法和代码似乎正确。语法“ sum + = n%10”也可以写为“ sum = sum + n%10”。而“ n / = 10”为“ n = n / 10”。这将支持c从上到下以及从左到右读取所有内容。
答案 4 :(得分:0)
下面对代码中正在发生的事情的描述应有助于您理解
#include <stdio.h>
// note, it is poor programming practice
// to include header files those contents are not used
//#include <string.h>
//#include <math.h>
//#include <stdlib.h>
int main()
{
// assume input is 54321
int n;
scanf("%d", &n);
int sum = 0;
while(n)
{
// values at each loop
sum += n % 10; // remember n%10 means the remainder of n/10
// n%10 =1 sum = 1
// n%10 =2 sum = 3
// n%10 =3 sum = 6
// n%10 =4 sum = 10
// n%10 =5 sum = 15
n/= 10; // shorthand for: n = n/10
//n = 5432
//n = 543
//n = 54
//n = 5
//n = 0
}
printf("%d\n", sum);
//Complete the code to calculate the sum of the five digits on n.
return 0;
}
输出为:
15