เราได้รับตัวเลขจำนวนเต็ม Num เป็นอินพุต เป้าหมายคือการหาส่วนกลับของตัวเลขโดยใช้ stack
กอง :- สแต็กเป็นโครงสร้างข้อมูลใน C ++ ซึ่งเก็บข้อมูลในลักษณะ LIFO (เข้าก่อนออกก่อน) การดำเนินการหลักของ stack คือ:
ประกาศ-:stack
-
ค้นหาอันดับสูงสุดโดยใช้ top() . ฟังก์ชัน stck.top() คืนค่าการอ้างอิงขององค์ประกอบบนสุดใน stck
-
การลบ Top โดยใช้ pop() . ฟังก์ชันลบองค์ประกอบบนสุดออกจาก stck
-
การเพิ่มองค์ประกอบที่ด้านบนโดยใช้ push() . ฟังก์ชั่น stck.push( ค่า ) เพิ่มมูลค่ารายการในกอง ค่าควรเป็นประเภท stck
-
ตรวจสอบว่า staxk ว่างเปล่าโดยใช้ empty() . ฟังก์ชัน stck.empty() คืนค่า จริง หากสแต็กว่างเปล่า
ตัวอย่าง
ป้อนข้อมูล − Num =33267
ผลผลิต − กลับเป็นตัวเลข:76233
คำอธิบาย −
ขั้นแรกเราจะพุชองค์ประกอบทั้งหมดให้กอง
7 - 6 - 2 - 3 - 3 ← ด้านบน
7 * 10000 + 6 * 1000 + 2*100 + 3*10 + 3*1 ←
=70000 + 6000 + 200 + 30 + 3 ←
=76233
ป้อนข้อมูล − Num =111000
ผลผลิต − หมายเลขกลับด้านคือ 111
คำอธิบาย −
ขั้นแรกเราจะพุชองค์ประกอบทั้งหมดให้กอง
0 - 0 - 0 - 1 - 1 - 1 ← ด้านบน
0 * 100000 + 0 * 10000 + 0*1000 + 1*100 + 1*10 + 1*1 ←
=0 + 0 + 0 + 100 + 10 + 1 ←
=111
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
ในแนวทางนี้ เราจะนำส่วนที่เหลือของหมายเลขอินพุตและกดไปที่สแต็กและลดจำนวนลง 10 จนกว่าตัวเลขจะกลายเป็น 0 ด้วยวิธีนี้สแต็กจะเต็มไปด้วยตัวเลขบนสุดเป็นหลักแรก
-
นำตัวเลขที่ใส่มา
-
ใช้ stack ว่างสำหรับจำนวนเต็มโดยใช้ stack
stck. -
ฟังก์ชัน pushDigts(int num1) รับ num1 และเพิ่มลงในสแต็กโดยมีหลักแรกอยู่ด้านบน
-
ใช้ rem เป็นตัวแปร
-
ใช้ while loop ตรวจสอบว่า num1 ไม่ใช่ศูนย์ ถ้าเป็นจริง ให้ตั้งค่า rem=num1%10
-
ดัน rem ไปที่ stack
-
ลด num1 ลง 10 สำหรับหลักที่ 2 เป็นต้น
-
ตอนนี้กลับตัวเลขโดยใช้องค์ประกอบของ stack ด้วยฟังก์ชัน revrseNum()
-
ใช้ตัวแปร revrs, topp, temp, i.
-
ในขณะที่สแต็กไม่ว่างเปล่า
-
ใช้องค์ประกอบบนสุดเป็น topp=stck.top()
-
ลดสแต็กโดยใช้stck.pop()
-
ตั้งค่า temp=topp*i.
-
เพิ่มอุณหภูมิในการย้อนกลับ
-
เพิ่ม i โดย i*10 คูณด้วย 100
-
ในตอนท้ายให้กลับค่าย้อนกลับของจำนวนอินพุตเป็นย้อนกลับ
-
ผลการพิมพ์ที่ได้รับภายใน main.
ตัวอย่าง
#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