不用除法和求模运算,判断一个数能否被3整除

来源:互联网 发布:linux 根目录挂载 编辑:程序博客网 时间:2024/03/29 01:52

昨天看到一个有意思的题目,不用除法和求模运算,判断一个数能否被3整除。这个问题,网上有人给了一个答案,但是该答案并不正确(读者可以自己去网上搜一下这个题目,可以看到该答案)。本文提出一个思路,与读者分享。

3是一个比较特别的数,其二进制表示是0b11,也就是说任何一个数乘以3的结果实际上是这个数与其左移1位后相加的结果。现在给出一个数a,假设它能被3整除,结果是b,即a=3*b,那么从二进制乘法运算判断出,b的最低位与a的最低位一定是相同的,从而得到了b的最低位,将这个位左移1位变成次低位,那么a的次低位以上的比特减去这个位后在次低位上的结果一定是b的次低位。以此类推可以求出b的各个比特,如果最后能完成对b的各位的计算,那么a能够被3整除,否则不能被3整除。

最后将上述思路写成代码是:

原创粉丝点击