检测一个数能否被3整除----位运算
发布日期:2021-10-03 20:32:36
浏览次数:39
分类:技术文章
本文共 676 字,大约阅读时间需要 2 分钟。
第一个解决方案就是小学就学过的,如果一个数的每个位相加之和能被3整除,则这个数就可以被3整除。例如612各位之和为9,则可以被3整除。但是这个解决方法并不高效,我们需要取得每一位,然后再一个个相加。
观察二进制,我们可以找到一个模式来判断一个数能否被3整除。如果所有的偶数位出现1的次数为 even_count, 奇数位出现1的次数为 odd_count,两者只差如果是3的倍数,那么这个数就是3倍数。
例如:23 (00…..0010111) even_count=3, odd_count = 1. 3-1 不能被2整除,所以不是3的倍数。
#include#include using namespace std;bool isMultipleOf3(int n){ int odd_num = 0; int even_num = 0; n = (n < 0) ? (-n) : n; while (n) { if (n & 1) odd_num++; n = n >> 1; if (n & 1) even_num++; n = n >> 1; } return (odd_num - even_num) % 3;}int main(){ int x; while (1) { cin >> x; if (!isMultipleOf3(x)) cout << "是3的倍数" << endl; else cout << "不是3的倍数" << endl; } return 0;}
转载地址:https://blog.csdn.net/LaoJiu_/article/details/51325446 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年03月30日 23时52分48秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【剑指OFFER】 43. 1~n 整数中 1 出现的次数
2019-04-26
【剑指OFFER】44. 数字序列中某一位的数字
2019-04-26
【剑指OFFER】45. 把数组排成最小的数
2019-04-26
【区块链】使用JAV简易A模拟创建区块链及挖矿
2019-04-26
【力扣】74. 搜索二维矩阵
2019-04-26
【剑指OFFER】46. 把数字翻译成字符串
2019-04-26
【剑指OFFER】47. 礼物的最大价值
2019-04-26
【力扣】90. 子集 II
2019-04-26
【剑指OFFER】48. 最长不含重复字符的子字符串
2019-04-26
【力扣】80. 删除有序数组中的重复项 II
2019-04-26
【剑指OFFER】50. 第一个只出现一次的字符
2019-04-26
【剑指OFFER】57 - II. 和为s的连续正数序列
2019-04-26
【Java】 用PriorityQueue实现最大最小堆
2019-04-26
【剑指OFFER】49. 丑数
2019-04-26
【力扣】179. 最大数
2019-04-26
【剑指OFFER】56 - I. 数组中数字出现的次数
2019-04-26
天池新人赛-工业蒸汽量预测-排名150
2019-04-26
天池新人实战赛o2o优惠券使用预测-排名181
2019-04-26
资金流入流出预测-挑战Baseline-排名445 /122.17
2019-04-26
第四届工业大数据创新竞赛-注塑成型工艺的虚拟量测和调机优化-决赛排名22
2019-04-26