通过C ++中的给定运算可以使2的幂数的计数

给我们一个正整数数组。目的是找出最多可以加1的数的个数。

我们将使用log2(i)检查该数字是否为2的幂或通过加1可以变为2的幂。如果是,则增加计数。

让我们通过示例来理解。

输入− arr [] = {1,3,2,5,6},

输出-可以变成2的3的幂的数字计数

说明-1 + 1 = 2→21,3 + 1 = 4→22,2 = 21其他将变成5 + 1 = 6,6 + 1 = 7

输入− arr [] = {2,4,8,16},

输出-可以成为2的4的幂的数字计数

说明-所有4个数字已经是2的幂。

以下程序中使用的方法如下

  • 我们采用以随机正数初始化的整数数组arr []。

  • 函数powofTwo(int arr [],int n)将一个数组及其长度作为输入,并返回一个等于或可以为2的幂的数字计数。

  • 将初始计数设为0。

  • 从i = 0遍历数组到i <n。

  • 对于每个元素,检查floor(log2(arr [i]))== ceil((log2(arr [i]))或floor(log2(arr [i] +1))== ceil((log2(arr [ i] +1)),如果在两种情况下均以true递增计数。

  • 返回计数作为最终结果。

示例

#include <bits/stdc++.h>
#include <math.h>
using namespace std;
int powofTwo(int arr[],int n){
   int count=0;
   for(int i=0;i<n;i++){
      if( floor(log2(arr[i])) == ceil(log2(arr[i])) )
         { count++; }
      else{
         ++arr[i];
         if( floor(log2(arr[i])) == ceil(log2(arr[i])) )
            { count++; }
      }
   }
   return count;
}
int main(){
   int Arr[]={ 5,6,9,3,1 };
   int len=sizeof(Arr)/sizeof(Arr[0]);
   cout<<endl<<"Count of numbers with power of 2 possible: "<<powofTwo(Arr,len);
   return 0;
}

输出结果

如果我们运行上面的代码,它将生成以下输出-

Count of numbers with power of 2 possible: 2