我希望能够均匀,可重复,并且可预测地将输入的整数值切换为三种情况之一。如果是两个案例,那就很明显了。
伪代码:
switch (integer) {
if even:
something;
break;
if odd:
something else;
break;
}
我想做同样的事情,但对于三个案例,我有点难以理解如何做到这一点。可能是因为我不太擅长数学。
有什么想法吗?
答案 0 :(得分:2)
如何除以3?
switch (x % 3) { // compute the remainder
case 0: // 0, 3, 6, 9, ...
something;
break;
case 1: // 1, 4, 7, 10, ...
something;
break;
case 2: // 2, 5, 8, 11, ...
something;
break;
}
您需要注意标志 - 有些语言会将(-5) % 3
计算为-2
而不是1
,因此您可能需要使用abs(x) % 3
代替{x % 3
1}}或添加case
语句:
switch (x % 3) { // compute the remainder
case 0: // -6, -3, 0, 3, 6, 9, ...
something;
break;
case 1: // 1, 4, 7, 10, ...
case -2: // ... -5, -2
something;
break;
case 2: // 2, 5, 8, 11, ...
case -1: // ... -4, -1
something;
break;
}
请参阅remainder和modulus operation。
PS在Common Lisp中你会使用mod
:
(ecase (mod x 3)
(0 ...)
(1 ...)
(2 ...))