使用棧在 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
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP