เราได้รับจำนวนเต็มเป็นอินพุต เป้าหมายคือการค้นหาว่าตัวเลขอินพุต Num เป็นพาลินโดรมหรือไม่ใช้การเรียกซ้ำ
หากต้องการตรวจสอบว่าตัวเลขเป็น palindrome หรือไม่ ให้ย้อนกลับหมายเลขนั้นและตรวจสอบว่าตัวเลขทั้งสองตัวเหมือนกันหรือไม่ หากจำนวนที่กลับด้านเท่ากับจำนวนเดิม ก็จะเป็นพาลินโดรม
ตัวอย่าง
ป้อนข้อมูล − Num =34212;
ผลผลิต − 34212 ไม่ใช่พาลินโดรม!
คำอธิบาย − หากเราย้อนกลับ 34212 เราก็จะได้ 21243 34212 !=21243 ดังนั้นหมายเลขอินพุตจึงไม่ใช่ palindrome
ป้อนข้อมูล − Num =32123;
ผลผลิต − 32123 คือพาลินโดรม!
คำอธิบาย − หากเราย้อนกลับ 32123 เราก็จะได้ 32132 32123!=32123 ดังนั้นตัวเลขที่ป้อนคือ palindrome
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
ในแนวทางนี้ เราใช้ฟังก์ชันเรียกซ้ำ revrsNum(int num1, int num2) ซึ่งรับหมายเลขอินพุต num1 และหมายเลขชั่วคราว num2
สำหรับกรณีพื้นฐาน-:ถ้า num1 เป็น 0 ส่งคืน num2
Else-:คำนวณการย้อนกลับของ num1 โดยใช้การเรียกซ้ำ กลับคำนวณย้อนกลับ
หากทั้งคู่เหมือนกัน แสดงว่าหมายเลขอินพุตคือพาลินโดรม
-
นำตัวเลขที่ใส่มา
-
ใช้ Num2 =revrsNum(Num,0)
-
ฟังก์ชัน revrsNum(int num1, int num2) สร้างการย้อนกลับของ num1 แบบเรียกซ้ำและส่งกลับจำนวนที่กลับด้าน
-
ถ้า num1 เป็น 0 ให้คืนค่า num2 ตามที่คำนวณกลับกัน
-
อย่างอื่น num2 คูณ 10 และเพิ่ม num1%10 เข้าไป
-
ลด num1 ลง 10 โดยใช้ num1=num1/10.
-
เรียกซ้ำโดยใช้ revrsNum(num1, num2);
-
ส่งคืนผลลัพธ์
-
ผลการพิมพ์ที่ได้รับภายใน main.
ตัวอย่าง
#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!