我不太了解将5位输入和相加的语法

时间:2019-05-15 14:52:32

标签: c syntax

我一直在阅读讨论代码,但不理解输出5位数字总和的语法。我以为C会从上至下,从左至右读取所有内容,因此%10和/ 10在语法上如何相加?

这是来自hackerrank的挑战,输入5位数字,并输出5位数字总和。

(CAR[\s\S]*?(?=\)))

样本输入10564 样本输出16

5 个答案:

答案 0 :(得分:1)

总和不是“ % 10/10语法上都”。

n % 10n的最低有效(最右边)数字。
这就是添加到sum中的内容。

然后n /= 10n = n / 10)从n处截去该数字,然后重复该过程。

您可以手动进行操作:

设置n = 12345sum = 0

12345不为零,因此进入循环:

12345 % 105,所以sum += 5就是5
12345 / 101234,所以n = 1234

现在,n1234,不为零。

1234 % 104,所以sum += 4就是9
1234 / 10123,所以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