Как работает код ниже? Выводит разбитое число и он полностью функционирует, я просто не понимаю как он это делает - PullRequest
0 голосов
/ 04 ноября 2019

Я не понимаю, как работает код ниже. Он успешно выводит разбитое число, но я хочу понять, как он работает. Может кто-нибудь объяснить, пожалуйста?

#include <iostream>
using namespace std;
int main()
{
    int number; //declares variable number
    int n1,n2,n3,n4; //declares four integer variables
    cout << "Please enter a four digit number:"; //outputs message
    cin >> number;

    n1 = number%10;  /* the next eight lines are what i am having trouble understanding */
    number /= 10;
    n2 = number%10;
    number /= 10;
    n3 = number%10;
    number /= 10;
    n4 = number%10;
    number /=10;

    cout << "ones:" << n1 << endl;
    cout << "tens:" << n2 << endl;
    cout << "hundreds:" << n3 << endl;
    cout << "thousands:" << n4 << endl;

    return 0;
}

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Хорошо, поэтому n1 = number % 10 дает вам остаток от деления на десять. (Если ввод 2137, то его 7). После этого number/=10 означает то же самое, что и number = number/10, поэтому число после этого будет 213 (потому что общее деление имеет место), и следующие строки в основном будут такими же

0 голосов
/ 04 ноября 2019

Позвольте мне начать с того, что StackOverflow на самом деле не предназначен для вопросов в форме «Пожалуйста, объясните мне этот кусок кода». Тем не менее, я по-прежнему буду проходить его для вас, поскольку вы новичок в StackOverflow, но помните об этом при написании следующего вопроса:)

TL; DR

number%10 извлекаетпоследняя цифра числа.

number /= 10 делит число на 10, удаляет десятичную часть и сохраняет ответ в number.

Длинное объяснение

Остатки

Здесь вы используете операцию по модулю или %. Эта операция делит числа, но вместо вывода ответа возвращает остаток .

Вот способ понимания остатков. Скажем, мы делаем 3/2 и суммируем возвращаемое значение (убираем десятичную часть):

3/2 = 1.5
floor(1.5) = 1

Теперь давайте сделаем обратное деление (умножим делитель на наш ответ):

3/2 = 1.5
1.5 * 2 = 3

Если вместо этого мы умножим делитель на наш промежуточный ответ:

1 * 2 = 2    ----> This is not 3

Чтобы вычислить остаток, мы найдем разницу между этим «неправильным» ответом и «правильным» ответом:

(correct answer) - (wrong answer) = remainder
3 - 2 = 1
remainder = 1

Итак, используя наш причудливый синтаксис %, который возвращает остаток :

3%2 = 1

Вот еще один пример:

17/3 = 5.666
floor(5.666) = 5

Inverse of division (multiply divisor by our answer):
5.666 * 3 = 17     ----> 17 is our "correct" value

Inverse of division, by with our floored value:
5 * 3 = 15   ----> 15 is our "wrong" value

Difference between our "correct" and "wrong" values:
17 - 15 = 2

So:
17%3 = 2

В вашем коде ...

Как вы используете этот код? Скажем, введенное вами число: 4559.

n1 = number%10 becomes:
n1 = 4559%10

Если мы следуем трюку, который мы использовали ранее,

4559/10 = 455.9
floor(455.9) = 455

455.9 * 10 = 4559   ----> Correct answer
455 * 10 = 4550     ----> Wrong answer

4559 - 4550 = 9     ----> Remainder

So:
4559%10 = 9

Короче, number%10 извлекает последнюю цифру number.

/= 10

В вашем коде используется еще одна хитрость.

number /= 10

Здесь вы просто набираете свое первоначальное число на 10. Однако number объявляется как int или целое число. Целые числа не могут содержать десятичных частей. Из-за этого компьютер просто избавляется от десятичной части после деления (это по существу этажей значение). В нашем случае, поскольку 4559 / 10 = 455.9, компьютер избавляется от .9:

4559 / 10 = 455    ----> This is what the computer returns

Наконец, вы используете /=, что просто означает, что делает деление с number,и сохраните ответ в number. Если мы снова используем 4559:

number /= 10
cout << number    ----> Outputs 455

Другими словами, number /= 10 просто удаляет цифру из number.

int number = 4559

n1 = number%10     ----> n1 = 9
number /= 10       ----> number = 455
n2 = number%10     ----> n2 = 5
number /= 10       ----> number = 45
n3 = number%10     ----> n3 = 5
number /= 10       ----> number = 4
n4 = number%10     ----> n4 = 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...