ภาพรวม
ได้รับจำนวนเต็ม Num เป็นอินพุต เป้าหมายคือหาตัวเลขย้อนกลับ (Reverse) โดยใช้ Stack
Stack คือโครงสร้างข้อมูลใน C++ ที่เก็บข้อมูลแบบ LIFO (Last In First Out) การดำเนินการหลัก:
- Declaration:
stack<int> stck; top()คืนค่าอิลิเมนต์บนสุดpop()นำอิลิเมนต์บนสุดออกpush(value)เพิ่มค่าลงบนสุดempty()ตรวจสอบว่าว่างหรือไม่
ตัวอย่าง
อินพุต − Num = 33267
เอาต์พุต − Reverse of number is: 76233
คำอธิบาย −
Push ทุกหลักเข้า Stack: 7 - 6 - 2 - 3 - 3 ← top
7×10000 + 6×1000 + 2×100 + 3×10 + 3×1 = 70000+6000+200+30+3 = 76233
อินพุต − Num = 111000
เอาต์พุต − Reverse of number is: 111
คำอธิบาย − Push: 0 - 0 - 0 - 1 - 1 - 1 ← top
0×100000 + 0×10000 + 0×1000 + 1×100 + 1×10 + 1×1 = 111
แนวทางการแก้ปัญหา
หารตัวเลขด้วย 10 ซ้ำๆ นำเศษ Push เข้า Stack จนตัวเลขเป็น 0 Stack จะมีหลักแรกอยู่บนสุด จากนั้น Pop ทีละตัว คูณด้วยกำลังของ 10 สะสมผลรวม
- รับตัวเลข
Num - Stack ว่าง
stack<int> stck - ฟังก์ชัน
pushDigts(int num1)Push หลักต่างๆ เข้า Stack - ตัวแปร
rem - while
num1 > 0:rem = num1 % 10, push rem,num1 /= 10 - ฟังก์ชัน
revrseNum()สร้างตัวเลขย้อนกลับจาก Stack - ตัวแปร
revrs=0, i=1, temp, topp - while Stack ไม่ว่าง:
topp = stck.top(), pop,temp = topp*i,revrs += temp,i *= 10 - คืนค่า
revrs - พิมพ์ผลลัพธ์ใน main
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
stack <int> stck;
void pushDigts(int num1){
int rem;
while (num1 > 0){
rem = num1 % 10;
stck.push(rem);
num1 = num1 / 10;
}
}
int revrseNum(){
int revrs = 0;
int i = 1;
int temp;
int topp;
while (!stck.empty()){
topp = stck.top();
stck.pop();
temp = topp * i;
revrs = revrs + temp;
i *= 10;
}
return revrs;
}
int main(){
int Num = 43556;
pushDigts(Num);
cout << "Reverse of number is: " << revrseNum();
return 0;
}
ผลลัพธ์
Reverse of number is: 65534