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

Reordered Power of 2 ใน C++

คำอธิบายปัญหา

กำหนดจำนวนเต็มบวก N จัดเรียงตัวเลขใหม่ได้ (ไม่มี leading zero) ตรวจสอบว่าสามารถจัดเป็น power of 2 ได้หรือไม่

ตัวอย่าง: 46 → true (จัดเป็น 64 = 2⁶)

วิธีแก้ปัญหา (Digit Count Signature)

  1. สร้าง signature ของตัวเลข: นับจำนวนตัวเลข 0-9 (เข้ารหัสเป็น int)
  2. คำนวณ signature ของ N
  3. เปรียบเทียบกับ signature ของ 2⁰ ถึง 2³¹

ตัวอย่างโค้ด C++

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    int countSignature(int x) {
        int sig = 0;
        while(x > 0) {
            sig += pow(10, x % 10); // ใช้ power of 10 เป็น digit counter
            x /= 10;
        }
        return sig;
    }
    
    bool reorderedPowerOf2(int N) {
        int target = countSignature(N);
        for(int i = 0; i < 31; i++) {
            if(countSignature(1 << i) == target) return true;
        }
        return false;
    }
};

int main() {
    Solution ob;
    cout << (ob.reorderedPowerOf2(812) ? "true" : "false");
    return 0;
}

อินพุต

812

เอาต์พุต

1