取模运算符的反义词是什么



我很难弄清楚如何让它工作,所以我来寻求这里聪明人的帮助。

问题是,我想反转以下等式的过程,以便我从给定Y中得到XZ

Z = [ ( X * 30 ) % Y ]

对于用例,用户输入数字Y然后按 ENTER,系统将获得当前服务器时间然后将其乘以 30。然后,用户将以格式HHMMssxxx(嗯,xxx这里是毫秒)获得剩余的服务器时间。我不知道毫秒的格式字母。.呵呵..),除以Y- 即(X*30) % Y其中X是转换为 int 的当前服务器时间。

我怎样才能反过来做到这一点?

问题是,X不应大于2359999-> (23:59:59.999) 24 小时制的最大时间值。

据说我有Z = 32, Y = 400,我怎么能找到X

我知道有可能有多个答案。这是我到目前为止提出的,但我认为这在性能方面不是很理想。

function getTimeIDx(rem, codeIndexer) {
var times = [];
for(var i = 0; i < 2400000; i++) {
if((i * 30) % codeIndexer == rem) {
var str = i.toString(),
l = str.length;
if(l < 9)
str = '000000000'.substr(0, 9 - l) + str;
str = str.substr(0, 2) + ':' + str.substr(2, 2) + ':' + str.substr(4, 2) + '.' + str.substr(6);
if(/^(?:[0-1]?d|2[0-3]):(?:[0-5]?d):(?:[0-5]+d)/.test(str))
times.push(str);
}
}
return times;
}

有没有办法更有效地做到这一点?有没有像反模这样的东西?

编辑:

更新了代码以检查字符串是否为有效时间。

您无法撤消它。模是除法运算的余数。

简化您的等式。 Z = Y % 2

Z 表示一半的值为 0,其余值为 1。

你不能只用余数和除数来解决股息。

让我们将其填充到等式中:

32 = ( X * 30 ) % 400

那么这意味着X * 30是 400 加 32 的倍数:

32
432
832
...

现在我们可以将其除以 30 得到 x。这可以像这样在 js 中完成:

function* reverse(Z, Y) {
for(let n = 0; ; n++)
yield (Z + Y * n) / 30;
}

可用作:

for(let X of reverse(32, 400))
console.log(X);

请注意,此循环将永远运行,因为有无限的结果。试试吧

最新更新