【发布时间】:2010-08-05 17:00:49
【问题描述】:
我想知道是否有更好的算法来解决我正在尝试做的事情:
wrapIndex(-6, 3) = 0 wrapIndex(-5, 3) = 1 wrapIndex(-4, 3) = 2 wrapIndex(-3, 3) = 0 wrapIndex(-2, 3) = 1 wrapIndex(-1, 3) = 2 wrapIndex(0, 3) = 0 wrapIndex(1, 3) = 1 wrapIndex(2, 3) = 2 wrapIndex(3, 3) = 0 wrapIndex(4, 3) = 1 wrapIndex(5, 3) = 2我想出了
函数 wrapIndex(i, i_max) { 如果(我 > -1) 返回 i%i_max; 变量 x = i_max + i%i_max; 如果(x == i_max) 返回0; 返回 x; }有更好的方法吗?
【问题讨论】:
-
[负数的Mod的副本正在融化我的大脑! ](stackoverflow.com/questions/1082917/…) 以及该网站上的至少十几个问题。 :-)
-
好吧,我搜索了负数的模,但没有真正找到任何东西...抱歉又重复了。
-
int mod(int k, int n) { return ((k %= n) < 0) ? k+n : k; } -
如果
n是正数,那么在Python 中(k % n)总是正数。