给定该数组的长度为size
且索引为n
的数组,如何将索引包装为始终在size-1
之内?对于正数,它只是n % size
,但是当n
为负数时,如何实现倒退?
我提出了什么:
int wrap(int size, int n) {
if (n >= 0)
return n % size;
else
return abs(size + n) % size;
}
但这仅适用于n <= size
;如何让它适用于任何n
?
预期产出:
wrap(4, -1) == 3
wrap(4, -2) == 2
wrap(4, -3) == 1
wrap(4, -4) == 0
wrap(4, -5) == 3
wrap(4, -6) == 2
wrap(4, -7) == 1
wrap(5, -8) == 0
答案 0 :(得分:3)
您希望模运算符具有分区。
int mod_floor(int a, int n) {
return ((a % n) + n) % n;
}