Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 재정렬된 2의 거듭제곱

<시간/>

양의 정수 N이 있다고 가정하고 선행 숫자가 0이 아닌 임의의 순서(원래 순서 포함)로 숫자를 재정렬합니다. 결과 숫자가 2의 거듭제곱이 되도록 이 작업을 수행할 수 있는지 확인해야 합니다. 따라서 숫자가 46과 같으면 답은 참이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • count라는 메서드를 정의하면 x가 입력으로 사용됩니다.

  • ret :=0

  • x가 0이 아닌 동안

    • ret :=ret + 10 ^ x의 마지막 숫자

    • x :=x / 10

  • 리턴 렛

  • 주요 방법에서 다음을 수행하십시오 -

  • x :=개수(N)

  • 0에서 31 사이의 i에 대해

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

입력

812

출력

1