如果不使用*、/、+、-、%,运算符?
How would you divide a number by 3 without using *, /, +, -, %, operators?
该号码可能有符号或无符号.
The number may be signed or unsigned.
推荐答案这是一个简单函数,执行所需操作.但它需要 + 运算符,所以你剩下要做的就是用位运算符添加值:
This is a simple function which performs the desired operation. But it requires the + operator, so all you have left to do is to add the values with bit-operators:
// replaces the + operator int add(int x, int y) { while (x) { int t = (x & y) << 1; y ^= x; x = t; } return y; } int divideby3(int num) { int sum = 0; while (num > 3) { sum = add(num >> 2, sum); num = add(num >> 2, num & 3); } if (num == 3) sum = add(sum, 1); return sum; }正如吉姆所说,这是可行的,因为:
As Jim commented this works, because:
- n = 4 * a + b
- n/3 = a + (a + b)/3
所以sum += a,n = a + b,然后迭代
当a == 0 (n <4), sum += floor(n/3); 即1, if n== 3,否则为 0