Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

กลับตัวเลขด้วย Stack ใน C++

ภาพรวม

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