在C ++中重新排序了2的幂

假设我们有一个正整数N,我们以任何顺序(包括原始顺序)对数字重新排序,以使前导数字不为零。我们必须检查是否可以通过这种方式来使所得的数字为2的幂。因此,如果该数字类似于46,则答案是正确的。

为了解决这个问题,我们将遵循以下步骤-

  • 定义一个称为count的方法,它将x作为输入

  • ret:= 0

  • 当x不为0时

    • ret:= ret + 10 ^ x的最后一位

    • x:= x / 10

  • 返回ret

  • 从主要方法中执行以下操作-

  • x:=计数(N)

  • 当我在0到31的范围内

    • 如果count(2 ^ i)= x,则返回true

  • 返回假

让我们看下面的实现以更好地理解-

示例

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int count(int x){
      int ret = 0;
      while(x){
         ret += pow(10, x % 10);
         x /= 10;
      }
      return ret;
   }
   bool reorderedPowerOf2(int N) {
      int x = count(N);
      for(int i = 0; i < 32; i++){
         f(count(1 << i) == x) return true;
      }
      return false;
   }
};
main(){
   Solution ob;
   cout << (ob.reorderedPowerOf2(812));
}

输入值

812

输出结果

1