使用棧在 C++ 中反轉數字


我們得到一個整數 Num 作為輸入。目標是使用棧找到該數字的反轉。

:- 棧是 C++ 中的一種資料結構,它以 LIFO(後進先出)的方式儲存資料。棧的主要操作有:

宣告:stack <int> stck; //stck 現在是一個棧變數。

  • 使用top()查詢頂部。函式 stck.top() 返回 stck 中頂部元素的引用

  • 使用pop()刪除頂部。函式從 stck 中刪除最頂部的元素

  • 使用push()將元素新增到頂部。函式 stck.push( value ) 將元素 value 新增到棧中。Value 應為 stck 的型別。

  • 使用empty()檢查棧是否為空。如果棧為空,則函式 stck.empty() 返回 true。

示例

輸入 - 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。這樣,棧將以第一位數字作為頂部填充。

  • 獲取輸入數字 Num。

  • 使用 stack<int> stck 獲取空整數棧。

  • 函式 pushDigts(int num1) 獲取 num1 並將其新增到棧中,第一位數字在頂部。

  • 將 rem 作為變數。

  • 使用 while 迴圈檢查 num1 是否非零,如果為真,則設定 rem=num1%10。

  • 將 rem 壓入棧。

  • 將 num1 減少 10 以獲取第二位數字,依此類推。

  • 現在使用函式 revrseNum() 反轉使用棧元素的數字。

  • 獲取變數 revrs、topp、temp、i。

  • 當棧不為空時

  • 將最頂部的元素作為 topp=stck.top() 獲取。

  • 使用 stck.pop() 減少棧。

  • 設定 temp=topp*i。

  • 將 temp 新增到 revrs 中。

  • 將 i 增加 i*10,以 100 的倍數增加。

  • 最後返回輸入數字的反轉作為 revrs。

  • 在 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

更新於:2021 年 11 月 3 日

2K+ 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.