บทนำ
Double Base Palindrome คือเลขที่เป็น Palindrome (อ่านจากหน้าหลังได้เหมือนกัน) ในสองระบบเลขพร้อมกัน เช่น ฐานสิบ (Decimal) และฐานสอง (Binary) หรือฐานอื่นๆ
ขั้นตอนการแก้ปัญหา
- รับตัวเลขและฐานเลขเป้าหมาย (base)
- ตรวจสอบว่าเป็น Palindrome ในฐานสิบหรือไม่
- แปลงตัวเลขเป็นสตริงในฐานเป้าหมาย
- ตรวจสอบว่าเป็น Palindrome ในฐานเป้าหมายหรือไม่
- ถ้าเป็น 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)