反向获得剩余?

我正在取一个用户输入的数字,加上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); 

现在我需要弄清楚如何反过来。

如果我只给出余数,我如何得到输入的原始数字?

有许多输入将提供相同的输出(例如,所有1000,1010,1020,1030等将返回7)。 因此,没有办法恢复四位数的原件。

另一方面,如果您知道输入是单位数,则可以执行以下操作来恢复它:

 num = (num + 3) % 10; 

(在模10算术中加3表示与减去7相同)

在其他情况下你可以恢复这个数字,但不幸的是,在你的四位数的一般情况下,这根本不可能。

更具体地说明评论中所说的内容:除以10后的余数给出了输入的最后一个(最低有效)十进制数字。

假设我得到2的余数。如果输入是四位数,那意味着输入是xyz2 ,其中xyz都是一个数字。 我为xy和/或z填写的任何数字都给出了除法后的余数的正确结果。

在那之后,我们只留下了扭转添加7部分的问题。 xyz2意味着对于任何给定的xyz2 ,我们需要减去7(如果结果为负,则通过加10来规范化)以获得可能产生该结果的输入。 xyz部分的每个可能值都是可能产生该结果的有效输入。 结果缺少任何数据来指示这些输入中的哪一个用于产生该特定结果。