使用栈在 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+ 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告