计算

这篇博客介绍如何解决一个涉及运算符优先级的计算问题。通过使用栈的数据结构,博主逐步解释了处理括号、不同运算符优先级的方法,并提供了样例输入和输出。博主分享了实现算法的过程,最终成功AC(Accepted)。
摘要由CSDN通过智能技术生成

描述

小明在你的帮助下,破密了Ferrari设的密码门,正要往前走,突然又出现了一个密码门,门上有一个算式,其中只有“(”,“)”,“0-9”,“+”,“-”,“*”,“/”,“^”,求出的值就是密码。小明数学学得不好,还需你帮他的忙。(“/”用整数除法)

格式

输入格式
共1行,为一个算式。
输出格式
共1行,就是密码。密码可以超过8位。

样例

输入样例

1+(3+2)*(7^2+6*9)/(2)

输出样例

258

限制

时间限制: 1000 ms

内存限制: 65536 KB

解析

这道题写了我好久,终于AC了,用了一种很笨的方法,一种一种情况去讨论,根据运算符的优先级来做,初始化两个栈,一个运算符栈,一个数字栈。
1、对于相同的运算符,栈外大于栈;
2、不论栈内还是栈外,乘、除、^永远大于加减;
3、栈内的“(”小于任何栈外的运算符,故此时将栈外的运算符直接入栈就好,相反,栈外的“(”大于任何栈内的运算符,故此时将“(”直接入栈就好;
4、栈外的“)”小于任何栈内的运算符,故将栈内的运算符出栈进行运算,如果此时栈内是“(”,直接出栈。

代码

#include <iostream>
#include<stack>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
stack<int> dig;
stack<char> op;
void YunSuan(int fuhao){
   
	//"+":1     "-":2    "*":3"    "/":4    "^":5
	int tempa,tempb,ans;
	tempb=dig.top();
	dig.pop();
	tempa=dig.top();
	dig.pop();
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值