我正在取一个用户输入的数字,加上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);
现在我需要弄清楚如何反过来。
如果只给出余数,我如何得到输入的原始数字?
答案 0 :(得分:4)
有许多输入会提供相同的输出(例如,所有1000,1010,1020,1030等都将返回7)。因此,无法恢复原始的四位数。
另一方面,如果您知道输入是单位数,则可以执行以下操作来恢复它:
num = (num + 3) % 10;
(在模数10算术中加3表示与减去7相同。)
在其他情况下,您可以恢复该号码,但不幸的是,在您的四位数的一般情况下,这根本不可能。
答案 1 :(得分:1)
更具体地说明评论中所说的内容:除以10后的余数给出了输入的最后一个(最低有效)十进制数字。
假设我得到2的余数。如果输入是四位数,则表示输入为xyz2
,其中x
,y
和z
各自一个数字。我为x
,y
和/或z
填写的任何数字都会在分割后给出正确的结果。
在那之后,我们只留下了扭转添加7部分的问题。这只意味着对于任何给定的xyz2
,我们需要减去7(并且通过添加10来标准化,如果结果为负)以获得可能产生该结果的输入。 xyz
部分的每个可能值都是可能产生该结果的有效输入。结果缺少任何数据来表明这些输入中的哪一个用于产生这一特定结果。