获取余数的反向

Reverse of Getting a Remainder?

本文关键字:余数 获取      更新时间:2023-10-16

我取一个用户输入的数字,加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,我们需要减去7(如果结果为负,则通过加10进行归一化),以获得可能产生该结果的输入。xyz部分的每一个可能值都将是可能产生该结果的有效输入。该结果缺乏任何数据来表明这些输入中的哪一个用于产生该特定结果。