HDU_1237_简单计算器
2024-10-18 01:48:10
运算符为+,-,*,/;操作数为整数;且没有括号
设定符号优先级,先在栈底压运算符0
#include<iostream>
#include<cstdio>
#include<cstring>
#include<stack>
using namespace std; stack<int> op;
stack<double> num; char input[]; bool prio[][]=
{
,,,,, //
,,,,, //+
,,,,, //-
,,,,, //*
,,,,, //,/
}; void getNext(bool &isOp,int &opNum,int &loc)
{
if(''<=input[loc]&&input[loc]<='')
{
int tmp=;
while(input[loc]!=' '&&input[loc]!=)
{
tmp*=;
tmp+=input[loc]-'';
loc++;
}
isOp=;
opNum=tmp;
if(input[loc]!=)
loc++;
}
else
{
isOp=;
if(input[loc]==)
opNum=;
else if(input[loc]=='+')
opNum=;
else if(input[loc]=='-')
opNum=;
else if(input[loc]=='*')
opNum=;
else
opNum=;
loc+=;
}
} int main()
{
while(gets(input))
{
while(!op.empty())
op.pop();
while(!num.empty())
num.pop();
if(strlen(input)==&&input[]=='')
break;
bool isOp=;
int opNum=,loc=;
op.push();
while(loc<=strlen(input))
{
getNext(isOp,opNum,loc);
if(isOp==)
num.push(opNum);
else
{
int opTop=op.top();
if(prio[opNum][opTop]==)
op.push(opNum);
else
{
while(prio[opNum][opTop]==) //这个地方之前出错,当当前运算符优先级比栈顶元素低,应该一直计算至栈顶元素优先级低于当前元素优先级
{
double num2=num.top();
num.pop();
double num1=num.top();
num.pop();
int nowOp=op.top();
op.pop();
opTop=op.top();
if(nowOp==)
num.push(num1+num2);
else if(nowOp==)
num.push(num1-num2);
else if(nowOp==)
num.push(num1*num2);
else if(nowOp==)
num.push(num1/num2);
}
op.push(opNum);
}
}
}
printf("%.2f\n",num.top());
}
return ;
}
最新文章
- C++设计模式-Builder建造者模式
- c++将引用作为函数的参数---6
- 简单的cocos2d-x手势(转)
- <;转载>;构造函数与拷贝构造函数
- C语言的一些常见细节
- 你需要Mobx还是Redux?
- python--对象实例化过程
- shell编程—简介(一)
- PAT基础6-7
- DLNg改善深层NN:第一周DL的实用层面
- SQL Server中调用WebService
- AfxBeginThread
- vscode关闭后未打开上次界面的解决办法
- Java初学者必学的JSTL
- abp + angular $http + webapi 服务
- Docker部署MySQL容器
- 使用Hexo写博客
- 【Python】setup-转载
- poj万人题
- 网络监控之一:ss(Socket Statistics)
热门文章
- windows下的java+maven项目环境搭建
- uboot中关于LCD的代码分析【转】
- YTU 2983: 小明的生机!
- maven目录结构介绍篇
- 【SCOI 2005】 最大子矩阵
- mysql 里面的isnull()和ifnull() is null 和 is not null
- crm-vue项目上线前对加载速度以及兼容IE的一些方法
- 执行linux脚本出现问题
- [2010国家集训队]Crash的旅游计划
- [Usaco2017 Feb]Why Did the Cow Cross the Road III (Gold)