小编典典

不使用 *、/、+、-、% 运算符将数字除以 3

all

*如果不使用, /, +, -, , 运算符,您如何将一个数除以 3 %

该号码可以有符号或无符号。


阅读 169

收藏
2022-03-03

共1个答案

小编典典

这是一个执行所需操作的简单功能。但它需要+运算符,所以您剩下要做的就是使用位运算符添加值:

// 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; 
}

正如吉姆评论这个作品,因为:

  • 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, else 0

2022-03-03