Reverse Polish notation is a notation where every operator follows all of its operands. For example, an expression (1+2)*(5+4) in the conventional Polish notation can be represented as 1 2 + 5 4 + * in the Reverse Polish notation. One of advantages of the Reverse Polish notation is that it is parenthesis-free.

Write a program which reads an expression in the Reverse Polish notation and prints the computational result.

An expression in the Reverse Polish notation is calculated using a stack. To evaluate the expression, the program should read symbols in order. If the symbol is an operand, the corresponding value should be pushed into the stack. On the other hand, if the symbols is an operator, the program should pop two elements from the stack, perform the corresponding operations, then push the result in to the stack. The program should repeat this operations.

Input

An expression is given in a line. Two consequtive symbols (operand or operator) are separated by a space character.

You can assume that +, - and * are given as the operator and an operand is a positive integer less than 106

Output

Print the computational result in a line.

Constraints

2 ≤ the number of operands in the expression ≤ 100
1 ≤ the number of operators in the expression ≤ 99
-1 × 109 ≤ values in the stack ≤ 109

Sample Input 1

1 2 +

Sample Output 1

3

Sample Input 2

1 2 + 3 4 - *

Sample Output 2

-3

一开始出错 [Error] void value not ignored as it ought to be 原因是a = s.pop() 使用的一个函数的返回值类型是void,而对它进行了赋值处理;

使用到的C库函数atoi, 注意atoi()里传入的参数(atoi函数原型见下)

标准C库函数
#include <stdlib.h>

原型 : int atoi( const char *str );

功能:将字符串str转换成一个整数并返回结果。参数str 以数字开头,当函数从str
中读到非数字字符则结束转换并将结果返回。
例如:int num = atoi(“1314.012”);
int值为1314

解题思路: 边输入边处理, 输入的字符若是数字, 则入栈, 若是(+, -, *)其中一个, 便从栈中弹出两个元素进行相应的运算(注意运算的顺序, 次栈顶元素  运算符  栈顶元素), 再将运算结果入栈, 依次循环


#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <stack>
using namespace std; int main()
{
stack<int> s;
int a, b;
char ch[110]; while(scanf("%s", ch) != EOF)
{
if(ch[0] == '+')
{
a = s.top();
s.pop();
b = s.top();
s.pop();
s.push(a + b);
}
else if(ch[0] == '-')
{
a = s.top();
s.pop();
b = s.top();
s.pop();
s.push(b - a);
}
else if(ch[0] == '*')
{
a = s.top();
s.pop();
b = s.top();
s.pop();
s.push(a * b);
}
else
{
s.push(atoi(ch));
}
} printf("%d\n", s.top()); while(!s.empty())
{
s.pop();
} return 0;
}

  

#include <stdio.h>
#include <stdlib.h>
#include <string.h> int top, S[1000]; void push(int x)
{
S[++top] = x; // top 加1之后将元素插入top所在位置
} int pop()
{
top --;
return S[top + 1]; // 返回top所指的元素
} int main()
{
int a, b;
top = 0;
char s[100];
while(scanf("%s", s) != EOF)
{
if(s[0] == '+')
{
a = pop();
b = pop();
push(a + b);
}
else if(s[0] == '-')
{
a = pop();
b = pop();
push(b - a);
}
else if(s[0] == '*')
{
a = pop();
b = pop();
push(a * b);
}
else
{
push(atoi(s));
}
} printf("%d\n", pop()); return 0;
}

  

Reverse Polish notation的更多相关文章

  1. [LeetCode] Evaluate Reverse Polish Notation 计算逆波兰表达式

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  2. 【leetcode】Evaluate Reverse Polish Notation

    Evaluate Reverse Polish Notation 题目描述: Evaluate the value of an arithmetic expression in Reverse Pol ...

  3. leetcode150 Evaluate Reverse Polish Notation

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  4. 【leetcode】Evaluate Reverse Polish Notation(middle)

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  5. Leetcode Evaluate Reverse Polish Notation

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  6. [LintCode] Evaluate Reverse Polish Notation 计算逆波兰表达式

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  7. 11. Evaluate Reverse Polish Notation

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  8. LeetCode OJ 150. Evaluate Reverse Polish Notation

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  9. Java for LeetCode 150 Evaluate Reverse Polish Notation

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  10. Evaluate Reverse Polish Notation

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

随机推荐

  1. 一步步带你做vue后台管理框架

    1.登录 (1).  一步步带你做vue后台管理框架(三)——登录功能 2.权限控制 (1)  基于Vue2.0实现后台系统权限控制 (2) 手摸手,带你用vue撸后台 系列二(登录权限篇)

  2. nyoj 999——师傅又被妖怪抓走了——————【双广搜】

    师傅又被妖怪抓走了 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 话说唐僧复得了孙行者,师徒们一心同体,共诣西方.自宝象国救了公主,承君臣送出城西,沿路饥餐渴饮,悟 ...

  3. 深入理解JavaScript系列(33):设计模式之策略模式

    介绍 策略模式定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户. 正文 在理解策略模式之前,我们先来一个例子,一般情况下,如果我们要做数据合法性验证,很 ...

  4. javascript小数相减出现一长串的小数位数

    我们要修改网页某个数据的显示格式,需要两步操作: 1.在JS中通过$('.class1 .class2 li:eq(2) span.value').text().trim();类似的语句获取到数据内容 ...

  5. Python pip windows安装

    参考页面: [1] : https://pip.pypa.io/en/latest/installing.html [2] : http://stackoverflow.com/questions/4 ...

  6. Bootstrap组件介绍

    一.下拉菜单 用于显示链接列表的可切换.有上下文的菜单.下拉菜单的 JavaScript 插件让它具有了交互性. 1.实例 将下拉菜单触发器和下拉菜单都包裹在 .dropdown 里,或者另一个声明了 ...

  7. Required Integer parameter 'XXX' is not present

    1.异常提示: DEBUG o.s.w.s.m.m.a.ServletInvocableHandlerMethod - Error resolving argument [2] [type=java. ...

  8. 原生js实现雪花飘落效果

    雪花飘落的效果实现步骤:1.使用setInterval定时器每800毫秒创建一个雪花:2.把每一个雪花作为参数传进动态下落的方法中即可. <style> *{padding: 0;marg ...

  9. 超级表格:要山寨Excel,还是与之Say Byebye?

    创业产品难免被人拿来与现有的知名产品比较,创业者也喜欢把自己的产品与现有的知名产品比较. 我,超级表格创始人,对此有话说. 当我要在各种场合描述超级表格是什么时,也纠结过. 向用户描述时,说超级表格类 ...

  10. 【Mood 19】DailyBuild 2月

    2月1号 仿美团loading时小人奔跑动画 HTML5定稿了,为什么原生App世界将被颠覆? -----HTML5一改过去卡顿不兼容的毛病,在硬件升级以及苹果谷歌策略变化的背景下,让自己的优势相对于 ...