Computer >> Máy Tính >  >> Lập trình >> C ++

Sức mạnh sắp xếp lại của 2 trong C ++

Giả sử chúng ta có một số nguyên dương N, chúng ta sắp xếp lại các chữ số theo thứ tự bất kỳ (kể cả thứ tự ban đầu) sao cho chữ số đứng đầu là khác 0. Chúng ta phải kiểm tra xem chúng ta có thể làm điều này theo cách sao cho số kết quả là lũy thừa của 2. Vì vậy, nếu số giống như 46, thì câu trả lời sẽ là đúng.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một phương thức được gọi là count, điều này sẽ lấy x làm đầu vào

  • ret:=0

  • trong khi x không phải 0

    • ret:=ret + 10 ^ chữ số cuối cùng của x

    • x:=x / 10

  • trả lại ret

  • Từ phương thức chính, hãy làm như sau -

  • x:=count (N)

  • cho tôi trong phạm vi từ 0 đến 31

    • nếu count (2 ^ i) =x, thì trả về true

  • trả về false

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

#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));
}

Đầu vào

812

Đầu ra

1