zoukankan      html  css  js  c++  java
  • PTA 5-21 求前缀表达式的值(25)- 线性表

    题目:http://pta.patest.cn/pta/test/15/exam/4/question/836

    PTA - 数据结构与算法(中文) - 5-21

    算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的结果值。

    输入格式说明:

    输入在一行内给出不超过30个字符的前缀表达式,只包含+、-、*、以及运算数,不同对象(运算数、运算符号)之间以空格分隔。

    输出格式说明:

    输出前缀表达式的运算结果,精确到小数点后1位,或错误信息“ERROR”。

    样例输入与输出:

    image

    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    using namespace std;
    double exp() //!返回前缀表达式的值
    {
        char a[10]; //!用于存储第一个非空格字符
        cin >> a;
        if(!a[1])
        {   //!a[1]为空,只有一位,即运算符或者数字0-9
            switch(a[0])
            { 
                //!递归
                case '+': return exp() + exp();
                case '-': return exp() - exp();
                case '*': return exp() * exp();
                case '/':
                   {
                        double fenzi=exp();
                        double fenmu=exp();
                        if(fenmu!=0)
                            return fenzi / fenmu;
                        else{
                            cout << "ERROR";
                            exit(0);        //!程序结束
                        }
                    }
                default : return atof(a);   //!将字符串转化成浮点数
            }
        }
        else
        {    //!a[1]不为空,不是运算符,是操作数
            if(a[0]=='-' || a[0]=='+')      //!带符号的数
            {
                char flag=a[0]; //!记录符号
                int i=0;
                while(a[i]){    //!覆盖符号
                    a[i]=a[i+1];
                    i++;
                }
                if(flag=='-')
                    return 0-atof(a);
                else
                    return atof(a);
            }
            else                            //!不带符号的数
                return atof(a);
        }
    }
    int main()
    {
        printf("%.1f",exp());   //!保留一位小数
        return 0;
    }
  • 相关阅读:
    linux学习笔记 ftp命令
    linux 学习笔记 wc命令
    linux 学习笔记 finding people
    通配符
    linux 学习笔记 管道 pipe ls cp mv
    linux学习笔记 其他常用命令
    linux 学习笔记 执行脚本篇章
    solr分词一:mmseg4j
    solr介绍一:Analyzer(分析器)、Tokenizer(分词器)
    solr-4.10.2版本使用tomcat7部署
  • 原文地址:https://www.cnblogs.com/claremore/p/4803869.html
Copyright © 2011-2022 走看看