不使用 *、/、+、-、% 运算符将数字除以 3 [英] Divide a number by 3 without using *, /, +, -, % operators
本文介绍了不使用 *、/、+、-、% 运算符将数字除以 3的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果不使用*
、/
、+
、-
、<代码>%,运算符?
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
这篇关于不使用 *、/、+、-、% 运算符将数字除以 3的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文