可能是重复问题:
负数取模问题
负数取模问题
我想知道是否有更好的算法来实现我的需求:
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
我得到了以下代码:
function wrapIndex(i, i_max) { if(i > -1) return i%i_max;
var x = i_max + i%i_max; if(x == i_max) return 0;
return x; }
是否有更好的方法来做这个?
int mod(int k, int n) { return ((k %= n) < 0) ? k+n : k; }
- Evgeni Sergeevn
是正数,那么(k % n)
始终为正数。 - Evgeni Sergeev