HDU_1237_简单计算器
运算符为+,-,*,/;操作数为整数;且没有括号
设定符号优先级,先在栈底压运算符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 ;
}
HDU_1237_简单计算器的更多相关文章
- 1.C#WinForm基础制作简单计算器
利用c#语言编写简单计算器: 核心知识点: MessageBox.Show(Convert.ToString(comboBox1.SelectedIndex));//下拉序号 MessageBox.S ...
- 菜鸟学Android编程——简单计算器《一》
菜鸟瞎搞,高手莫进 本人菜鸟一枚,最近在学Android编程,网上看了一些视频教程,于是想着平时手机上的计算器应该很简单,自己何不尝试着做一个呢? 于是就冒冒失失的开撸了. 简单计算器嘛,功能当然很少 ...
- PAT 06-1 简单计算器
想看一般简单计算器实现的看客不好意思了,这不是你想要点东西,此处题设为“只能进行加减乘除”.“都是整数”.”优先级相同“和"从左到右".此题来自PAT(http://www.pat ...
- php大力力 [005节] php大力力简单计算器001
2015-08-22 php大力力005. php大力力简单计算器001: 上网看视频,看了半天,敲击代码,如下: <html> <head> <title>简单计 ...
- PHP实现简单计算器
<!--简单的计算器--> <!DOCTYPE html> <html> <head> <title>PHP实现简单计算器</titl ...
- c#部分---网吧充值系统;简易的闹钟;出租车计费;简单计算器;对战游戏;等额本金法计算贷款还款利息等;随机生成10个不重复的50以内的整数;推箱子;
网吧充值系统namespace ConsoleApplication1 { class Program { struct huiyuan { public string name; public st ...
- JavaWeb学习记录(二十)——Model1模式(javaBean+jsp)实现简单计算器案例
¨JSP技术提供了三个关于JavaBean组件的动作元素,即JSP标签,它们分别为: ¨<jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件. ¨< ...
- 一个用WPF做的简单计算器源代码
一.界面设计XAML代码 <Window x:Class="fengjisuanqi.MainWindow" xmlns="http://schemas.micro ...
- hdu 1237 简单计算器
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1237 简单计算器 Description 读入一个只包含 +, -, *, / 的非负整数计算表达式, ...
随机推荐
- java垃圾回收机制的使用
public class Test { public static void main(String[] args) throws Exception { Book b=new Book(true); ...
- UESTC149 解救小Q
小Q被邪恶的大魔王困在了迷宫里,love8909决定去解救她.迷宫里面有一些陷阱,一旦走到陷阱里,就会被困身亡:(,迷宫里还有一些古老的传送阵,一旦走到传送阵上,会强制被传送到传送阵的另一头.现在请你 ...
- 5.2【Linux 内核网络协议栈源码剖析】socket 函数剖析 ☆☆☆
深度剖析网络协议栈中的 socket 函数,可以说是把前面介绍的串联起来,将网络协议栈各层关联起来. 应用层 FTP SMTP HTTP ... 传输层 TCP UDP 网络层 IP ICMP ARP ...
- YTU 2418: C语言习题 矩阵元素变换
2418: C语言习题 矩阵元素变换 时间限制: 1 Sec 内存限制: 128 MB 提交: 293 解决: 155 题目描述 将一个n×n(2<n<10,n为奇数)的矩阵中最大的元 ...
- POJ - 1986 Distance Queries(离线Tarjan算法)
1.一颗树中,给出a,b,求最近的距离.(我没考虑不联通的情况,即不是一颗树的情况) 2.用最近公共祖先来求, 记下根结点到任意一点的距离dis[],这样ans = dis[u] + dis[v] - ...
- codeforces 686D D. Kay and Snowflake(dfs)
题目链接: D. Kay and Snowflake time limit per test 3 seconds memory limit per test 256 megabytes input s ...
- bzoj 1504 郁闷的出纳员
题目大意: 有一些员工 他们有工资 当他们的工资低于一个值时 他们会永远离开 I命令 I_k 新建一个工资档案,初始工资为k. 如果某员工的初始工资低于工资下界,他将立 ...
- HDU 5514 Frogs (数论容斥)
题意:有n只青蛙,m个石头(围成圆圈).第i只青蛙每次只能条ai个石头,问最后所有青蛙跳过的石头的下标总和是多少? 析:首先可以知道的是第 i 只青蛙可以跳到 k * gcd(ai, m),然后我就计 ...
- bzoj 2087: [Poi2010]Sheep【凸包+极角排序+dp】
首先处理处理出来哪些边能连--能把羊分成两个偶数部分的,实现是在凸包上枚举极点,极角排序,枚举凸包上点对判断两边羊的个数的奇偶即可,设可以连边为v[i][j]=1 然后设f[i][j]为从i到j个凸包 ...
- P4475 巧克力王国(KDTree)
传送门 首先可以把约束条件看成一条直线,然后每个巧克力看成一个点,求给定区域内的点权和 用KDTree,每次判断一下当前矩形是否整个都在里面或都在外面,是的话直接返回,否则的话递归 注意,必须该矩形四 ...