C++ 中重新排列的 2 的幂


假设我们有一个正整数 N,我们以任何顺序(包括原始顺序)对数字进行重新排列,使得首位数字非零。我们必须检查能否通过这种方式进行操作,使得生成的结果是一个 2 的幂。因此,如果数字是 46,那么答案将为真。

要解决这个问题,我们将遵循以下步骤 −

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

  • ret := 0

  • 如果 x 不为 0

    • ret := ret + x 的最低位数的 10 的幂

    • x := x / 10

  • 返回 ret

  • 在主方法中执行以下操作 −

  • x := count(N)

  • 对于 i 的范围从 0 到 31

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

  • 返回 false

让我们了解一下以下实现以获得更好的理解 −

示例

#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++){
         if(count(1 << i) == x) return true;
      }
      return false;
   }
};
main(){
   Solution ob;
   cout << (ob.reorderedPowerOf2(812));
}

输入

812

输出

1

更新日期:19-7-2020

176 次浏览

あなたのキャリアをスタートさせましょう

コースを完了することで認定を取得しましょう

始める
広告