首页 > 代码库 > 1470 数据结构:逆波兰表达式
1470 数据结构:逆波兰表达式
本题难点有二:
其一为波兰表达式递归求值算法的理解;
其二为处理多组数据,scanf()的返回值是成功赋值的变量数量, 发生错误时返回EOF.注意exit()与return的区别
关于波兰(前缀)表达式、中缀表达式、逆波兰(后缀)表达式的详细介绍,请参考:http://www.cnblogs.com/chenying99/p/3675876.html
另外,指出本题的一个小错误,应把题目中所有的“逆波兰”改为“波兰”。
// 测试用例:// * - 2 3 4// - 3 2// - 7 7// * + 11.0 12.0 + 24.0 35.0#include <iostream>#include <cstdlib>#include <cmath>using namespace std;double Evaluate()//波兰(前缀)表达式递归求值算法,需要好好理解{ char a[15];//用于存储每次递归读取的一个非空字符(串) if (scanf("%s", &a) == EOF) exit(0);//处理多组数据正常结束的问题 switch (a[0]) { case ‘+‘: return Evaluate() + Evaluate(); case ‘-‘: return Evaluate() - Evaluate(); case ‘*‘: return Evaluate() * Evaluate(); case ‘/‘: return Evaluate() / Evaluate(); default: return atof(a); }}int main(int argc, char const *argv[]){ //#ifndef _OJ_ //ONLINE_JUDGE // freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); //#endif while (1) printf("%f\n",Evaluate()); return 0;}
1470 数据结构:逆波兰表达式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。