编写高效的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

更新于:2020年4月17日

985 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告