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;
    }
  }