ภาพรวม
ได้รับจำนวนเต็มเป็นอินพุต เป้าหมายคือตรวจสอบว่า Num เป็นเลข Palindrome (อ่านจากหน้าหลังได้เหมือนกัน) หรือไม่ โดยใช้การเรียกซ้ำ
วิธีตรวจสอบ: กลับตัวเลขแล้วเปรียบเทียบกับตัวเลขเดิม หากเท่ากัน คือ Palindrome
ตัวอย่าง
อินพุต − Num = 34212
เอาต์พุต − 34212 is not a Palindrome!
คำอธิบาย − กลับ 34212 ได้ 21243 34212 != 21243 จึงไม่ใช่ Palindrome
อินพุต − Num = 32123
เอาต์พุต − 32123 is Palindrome!
คำอธิบาย − กลับ 32123 ได้ 32123 เท่ากัน จึงเป็น Palindrome
แนวทางการแก้ปัญหา
ใช้ฟังก์ชันเรียกซ้ำ revrsNum(int num1, int num2) รับตัวเลข num1 และตัวเลขชั่วคราว num2
Base case: หาก num1 == 0 คืน num2 (ตัวเลขที่กลับแล้ว)
Recursive: num2 *= 10; num2 += num1 % 10; num1 /= 10; เรียกซ้ำ revrsNum(num1, num2)
- รับตัวเลข
Num - คำนวณ
Num2 = revrsNum(Num, 0) - ฟังก์ชัน
revrsNumสร้างตัวเลขย้อนกลับแบบเรียกซ้ำ - หาก
num1 == 0คืนnum2 - มิฉะนั้น
num2 = num2*10 + num1%10; num1 /= 10;เรียกซ้ำ - เปรียบเทียบ
NumกับNum2พิมพ์ผลลัพธ์
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
int revrsNum(int num1, int num2){
if (num1 == 0){
return num2;
}
num2 *= 10;
num2 += (num1 % 10);
num1 = num1 / 10;
return revrsNum(num1, num2);
}
int main(){
int Num = 1345431;
int Num2 = revrsNum(Num, 0);
if (Num == Num2){
cout << Num << " is Palindrome!";
} else {
cout << Num << " is not a Palindrome!";
}
return 0;
}
ผลลัพธ์
1345431 is Palindrome!