不使用 *、/、+、-、% 运算符将数字除以 3 [英] Divide a number by 3 without using *, /, +, -, % operators

查看:23
本文介绍了不使用 *、/、+、-、% 运算符将数字除以 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 += an = a + b,然后迭代

a == 0 (n <4), sum += floor(n/3); 即1, if n== 3,否则为 0

这篇关于不使用 *、/、+、-、% 运算符将数字除以 3的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆