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

Double Base Palindrome (แพลินโดรมสองฐาน) ใน C++

บทนำ

Double Base Palindrome คือเลขที่เป็น Palindrome (อ่านจากหน้าหลังได้เหมือนกัน) ในสองระบบเลขพร้อมกัน เช่น ฐานสิบ (Decimal) และฐานสอง (Binary) หรือฐานอื่นๆ

ขั้นตอนการแก้ปัญหา

  1. รับตัวเลขและฐานเลขเป้าหมาย (base)
  2. ตรวจสอบว่าเป็น Palindrome ในฐานสิบหรือไม่
  3. แปลงตัวเลขเป็นสตริงในฐานเป้าหมาย
  4. ตรวจสอบว่าเป็น Palindrome ในฐานเป้าหมายหรือไม่
  5. ถ้าเป็น Palindrome ในทั้งสองฐาน → ตอบ Yes, มิฉะนั้น → No

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

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

string integer_to_string(int n, int base) {
    string str;
    while (n > 0) {
        int digit = n % base;
        n /= base;
        str.push_back(digit + '0');
    }
    return str;
}

string isDoubleBasePalidrome(int n, int k) {
    int temp = n;
    int number_reverse = 0;
    while (temp > 0) {
        number_reverse = temp % 10 + number_reverse * 10;
        temp /= 10;
    }
    if (number_reverse == n) {
        // แปลงเป็นฐาน k
        string str = integer_to_string(n, k);
        string str_copy = str;
        // กลับสตริงในฐาน k
        reverse(str.begin(), str.end());
        if (str == str_copy) {
            return "Yes";
        }
    }
    return "No";
}

int main() {
    int n = 313, k = 2;
    cout << isDoubleBasePalidrome(n, k) << endl;
    return 0;
}

ผลลัพธ์

Yes

คำอธิบาย

313 เป็น Palindrome ในฐานสิบ (อ่านหน้าหลังได้ 313) และในฐานสองคือ 100111001 ซึ่งก็เป็น Palindrome เช่นกัน

สรุป

โปรแกรมนี้สาธิตการตรวจสอบ Palindrome หลายฐานเลข ซึ่งเป็นโจทย์คลาสสิกในการแข่งขันเขียนโปรแกรม (Competitive Programming)