Реверс получения остатка?

0

Я беру число, которое вводит пользователь, добавляет 7, затем делит на 10 и берет остаток и использует это значение в качестве моего нового значения. Мы также предполагаем, что номер входа будет ВСЕГДА иметь длину 4 символа, поэтому, например, пользователь будет вводить 1234 или 1235 или 9999 и т.д. Он никогда не будет больше или меньше этого.

Это будет выглядеть примерно так:

int num;
printf("Input a number: ");
scanf("%d", &num);

num = (num + 7) % 10;

printf("Here is the number after my calculations: %d", num);

Теперь мне нужно выяснить, как это сделать.

Как получить исходный номер, который был введен, если мне предоставляется только остаток?

  • 9
    Это модульная арифметика. Вы не можете вернуть оригинал.
  • 0
    Вы не можете сделать это, так как есть много входов, которые отображаются на один и тот же выход. Если бы вам предоставили домен, в котором находится решение, это было бы возможно.
Показать ещё 8 комментариев
Теги:

2 ответа

4

Есть много входов, которые будут давать тот же результат (например, все 1000, 1010, 1020, 1030 и т.д. Вернут 7). Поэтому нет возможности восстановить четырехзначный оригинал.

Если, с другой стороны, вы знали, что ввод был однозначным, вы можете сделать следующее, чтобы восстановить его:

num = (num + 3) % 10;

(Добавление 3 в арифметике по модулю 10 аналогично вычитанию 7.)

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

  • 2
    Это на самом деле не ОТВЕТ (да, это ответ, но он не решает первоначальный вопрос, который является требованием для правильного ответа).
  • 2
    @MatsPetersson: Я думаю, что это как можно ближе к ответу, насколько это может быть разумно дано для поставленного вопроса (я полагаю, вы смотрите на последнюю версию ответа).
Показать ещё 7 комментариев
1

Чтобы быть более конкретным из того, что было сказано в комментариях: остаток после деления на 10 дает вам последнюю (наименее значимую) десятичную цифру ввода.

Предположим, что я получаю остаток от 2. Если входной сигнал был четыре цифры, это означает, что вход был xyz2, где x, y и z - каждая цифра. Любая цифра, которую я заполняю для x, y и/или z дает правильный результат, оставшийся после деления.

После этого у нас остается вопрос об обращении с добавлением 7-й части. Это просто означает, что для любого заданного xyz2 нам нужно вычесть 7 (и нормализовать, добавив 10, если результат отрицательный), чтобы получить вход, который мог бы произвести этот результат. Каждое возможное значение для xyz части будет действительным входом, который мог бы привести к такому результату. В результате отсутствуют какие-либо данные, указывающие, какой из этих входов использовался для получения этого конкретного результата.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню