使用栈在 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