编写高效的C++方法检查数字是否为3的倍数
在这里,我们需要编写一个程序来检查给定的数字是否为3的倍数。
一个通用的解决方案是一个简单的解决方案,将数字的所有位数相加,如果和是3的倍数,则该数字可被3整除,否则不可被3整除。但是,此解决方案并非最有效的解决方案。
一个有效的解决方案是使用数字二进制表示中设置位的计数。*如果奇数位设置位计数与偶数位设置位计数之间的差是3的倍数,则该数字是3的倍数。*
我们将使用循环并移位数字的位,并计算奇数和偶数位置的位数。最后,我们将返回检查差值是否为三的倍数。
让我们举个例子来理解实现:
输入
n = 24
输出
even
解释
binary representation = 11000 Evensetbits = 1 , oddsetbits = 1. Difference = 0, it is divisible.
程序展示了我们解决方案的实现:
示例
#include <bits/stdc++.h>
using namespace std;
int isDivisibleBy3(int n) {
int oddBitCount = 0;
int evenBitCount = 0;
if (n < 0)
n = -n;
if (n == 0)
return 1;
if (n == 1)
return 0;
while (n) {
if (n & 1)
oddBitCount++;
if (n & 2)
evenBitCount++;
n = n >> 2;
}
return isDivisibleBy3(oddBitCount - evenBitCount);
}
int main() {
int n = 1241;
cout<<"The number "<<n;
if (isDivisibleBy3(n))
cout<<" is a multiple of 3";
else
cout<<" is not a multiple of 3";
return 0;
}输出
The number 1241 is not a multiple of 3
广告
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP