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

ย้อนกลับตัวเลขโดยใช้ stack ใน C ++


เราได้รับตัวเลขจำนวนเต็ม Num เป็นอินพุต เป้าหมายคือการหาส่วนกลับของตัวเลขโดยใช้ stack

กอง :- สแต็กเป็นโครงสร้างข้อมูลใน C ++ ซึ่งเก็บข้อมูลในลักษณะ LIFO (เข้าก่อนออกก่อน) การดำเนินการหลักของ stack คือ:

ประกาศ-:stack stck; //stck ตอนนี้เป็นตัวแปรสแต็ก

  • ค้นหาอันดับสูงสุดโดยใช้ 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