码迷,mamicode.com
首页 > 其他好文 > 详细

1470 数据结构:逆波兰表达式

时间:2015-01-27 19:59:01      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

本题难点有二:

  其一为波兰表达式递归求值算法的理解;

  其二为处理多组数据,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 数据结构:逆波兰表达式

标签:

原文地址:http://www.cnblogs.com/Code--Monkey/p/4253713.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!