เราได้รับตัวเลขจำนวนเต็ม 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