Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จัดเรียงกำลังใหม่เป็น 2 ใน C++


สมมติว่าเรามีจำนวนเต็มบวก N เราจะเรียงลำดับตัวเลขใหม่ตามลำดับใดๆ (รวมถึงลำดับเดิม) โดยที่หลักนำหน้าจะไม่เป็นศูนย์ เราต้องตรวจสอบก่อนว่าจะทำในลักษณะนี้ได้หรือไม่ ผลลัพธ์ที่ได้จะเป็นเลขยกกำลัง 2 ดังนั้นหากตัวเลขเช่น 46 คำตอบจะเป็นจริง

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดวิธีการที่เรียกว่า count ซึ่งจะใช้ x เป็นอินพุต

  • ยกเลิก :=0

  • ในขณะที่ x ไม่ใช่ 0

    • ret :=ret + 10 ^ หลักสุดท้ายของ x

    • x :=x / 10

  • รีเทิร์น

  • จากวิธีหลัก ให้ทำดังต่อไปนี้ −

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

อินพุต

812

ผลลัพธ์

1