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 次瀏覽

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

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

始める
広告
© . All rights reserved.