2014-09-10 2 views
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

Это модульная арифметика. Вы не можете вернуть оригинал. – juanchopanza

+0

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

+2

Хотя это не имеет значения для этого вопроса, выберите C или C++ и придерживайтесь его. Современные языки не совпадают, и идиоматические ответы могут существенно различаться. – crashmstr

ответ

4

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

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

num = (num + 3) % 10; 

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

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

+2

Это не ОТВЕТ (да, это ответ, но он не решает исходный вопрос, который является требованием для правильного ответа). –

+2

@MatsPetersson: Я думаю, что это как можно ближе к ответу, который может быть обоснованно задан для вопроса, как указано (я предполагаю, что вы смотрите на последнюю версию ответа). – NPE

+0

Я добавил что-то. Мы знаем, что пользователь всегда будет вводить четырехзначное длинное число, например 1234 или 9999, 4321 и т. Д. – FooBar

1

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

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

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