я не совсем понимаю синтаксис, где он добавляет сумму 5 цифр ввода - PullRequest
0 голосов
/ 15 мая 2019

Я читал коды обсуждений и не понимаю синтаксиса, в котором выводится сумма из 5 цифр.я думал, что C читает все сверху вниз, слева направо, так как же сумма% 10 и / 10 синтаксически?

это вызов от хакерранка, введите 5 цифр и выведите сумму 5 цифр.

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {

int n;
scanf("%d", &n);
int sum = 0;

while(n)
{
    sum += n % 10;
    n/= 10;
}

printf("%d\n", sum);
//Complete the code to calculate the sum of the five digits on n.
return 0;
}

выборочный ввод 10564, выход sampe 16

Ответы [ 5 ]

1 голос
/ 15 мая 2019

Сумма не "синтаксически" и % 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 не станет нулем, что произойдет после того, как останется только одна цифра.

0 голосов
/ 15 мая 2019

следующее описание того, что происходит в вашем коде, должно помочь вам понять,

#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
0 голосов
/ 15 мая 2019

Как это работает:

Пока n не равно нулю, вы добавляете остаток от деления n / 10.Если n = 10564: на первой итерации вы получите 4, результат 10564% 10.Затем, разделив 10564 на 10, вы получите 1056,4.НО n является целочисленным значением, поэтому вы получаете n = 1056

Выполняя одну и ту же операцию, вы всегда получаете единицы n и добавляете их к сумме.

0 голосов
/ 15 мая 2019

Ну, синтаксис и код кажутся правильными.Синтаксис «сумма + = n% 10» также может быть записан как «сумма = сумма + n% 10».И 'n / = 10' как 'n = n / 10'.Это будет поддерживать то, что c читает все сверху вниз и слева направо.

0 голосов
/ 15 мая 2019

Хотя компилятор может внести некоторые оптимизации, чтобы ваш код мог измениться, C работает над вашим кодом сверху вниз.

То, что происходит здесь в цикле while

sum += n % 10; == sum = sum + n % 10; сначала активируется оператор %, а затем оператор +. Итак, сначала вы получаете последнюю значащую цифру числа, а затем суммируете ее с результатом и присваиваете ей sum.

то же самое происходит в n/= 10;. сначала вы делите число, сохраненное в n, а затем сохраняете результат в n.

Надеюсь, это ответит на ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...