我在i
范围内的参数[1001..999999]
有一个函数(某种旋转):
int a = ((i - 1) % (1000000 - 1000) + 1001)
如你所见
i = 1001 a = 2001
...
i = 5000 a = 6000
...
i = 999999 a = 1999
我想反向这个函数,即拥有i = f(a)
,这样,如果给出a = 6000
,我希望5000
为%
不幸的是,我遇到了反转case XmlPullParser.START_TAG:
if(name.equals("temperature"))
result[0] = parser.getAttributeValue(null,"value");
break;
(模运算)的问题。旋转数字或反转上述公式有什么建议吗?
答案 0 :(得分:1)
正如您所看到的那样,由于(1000000 - 1000)
非常 greate 一个值,因此只需两个案例就可以获得(i - 1) % (1000000 - 1000)
i - 1 if i < 999001
i - 1 - 999001 if i >= 999001
为了反转公式,你只需要分析这两种情况,你就可以轻松实现
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;
}
}