C# 使用模的旋转数
在C# 使用模的旋转数,c#,C#,在[1001..99999]范围内,我有一个参数I的函数(某种旋转): int a = ((i - 1) % (1000000 - 1000) + 1001) 如你所见 i = 1001 a = 2001 ... i = 5000 a = 6000 ... i = 999999 a = 1999 我想反转这个函数,也就是说,如果给定了a=6000,我想把5000作为返回值等等。不幸的是,我遇到了一个逆%(模运算)的问题。在轮换数字或颠倒上述公式方面有什么建议吗 如您
[1001..99999]
范围内,我有一个参数I
的函数(某种旋转):
int a = ((i - 1) % (1000000 - 1000) + 1001)
如你所见
i = 1001 a = 2001
...
i = 5000 a = 6000
...
i = 999999 a = 1999
我想反转这个函数,也就是说,如果给定了
a=6000,我想把5000
作为返回值等等。不幸的是,我遇到了一个逆%
(模运算)的问题。在轮换数字或颠倒上述公式方面有什么建议吗 如您所见,由于(1000000-1000)
是一个相当大的值,因此(i-1)%(1000000-1000)
只需两种情况
试验
for (int i = 1001; i <= 999999; ++i) {
// forward, the formula from the question
int a = ((i - 1) % (1000000 - 1000) + 1001);
// ...and inverse one
int r = (a > 2000) ? a - 1000 : a + 998000;
// do we have reversed value != initial one?
if (r != i) {
// this will never happen
Console.Write("Counter example {0}", i);
break;
}
}
for(int i=1001;i 2000)?a-1000:a+998000;
//我们有反向价值吗!=第一个?
如果(r!=i){
//这永远不会发生
Write(“反例{0}”,i);
打破
}
}
将数字从1001旋转到999999是什么意思。你能至少显示预期的输入和输出吗。你的公式会变得太复杂。只需使用一个初始值为1001的单独变量,并在达到上限时重置它。它还可以保持可读性。@aQsu问题是我实际上是数据库中的OID,但我需要我的号码从1001开始,而不是从1开始。因此,您需要的是一个类似于循环/重复范围1001..999999
的环形/环形计数器。但你说的“逆转”是什么意思?你的意思是让它倒计时,即重复范围[999999..1001]
?@Abbondanza是的。相反的意思是如果我现在有“a”,而我需要找到“i”…当你只在阅读了接受的答案后才理解问题#只是把事情弄得一团糟
if (a > 2000)
return a - 1000;
else
return a + 998000;
for (int i = 1001; i <= 999999; ++i) {
// forward, the formula from the question
int a = ((i - 1) % (1000000 - 1000) + 1001);
// ...and inverse one
int r = (a > 2000) ? a - 1000 : a + 998000;
// do we have reversed value != initial one?
if (r != i) {
// this will never happen
Console.Write("Counter example {0}", i);
break;
}
}