• 前缀表达式求值


    对于一个前缀表达式的求值而言,首先要从右至左扫描表达式,从右边第一个字符开始判断,如果当前字符是数字则一直到数字串的末尾再记录下来,如果是运算符,则将右边离得最近的两个“数字串”作相应的运算,以此作为一个新的“数字串”并记录下来。一直扫描到表达式的最左端时,最后运算的值也就是表达式的值。例如,前缀表达式“- 1 + 2 3“的求值,扫描到3时,记录下这个数字串,扫描到2时,记录下这个数字串,当扫描到+时,将+右移做相邻两数字串的运算符,记为2+3,结果为5,记录下这个新数字串,并继续向左扫描,扫描到1时,记录下这个数字串,扫描到-时,将-右移做相邻两数字串的运算符,记为1-5,结果为-4,所以表达式的值为-4。

    pat:求前缀表达式的值

    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    #include<math.h>
    #include<stack>
    using namespace std;
    
    int main(){
        char s[33];
        int i,f=0,k=0;
        double a,b,num=0,c;
        stack<double> st;
        gets(s);int l=strlen(s);
        for(i=l-1;i>=0;i--){
            if(isdigit(s[i])){
                num+=(s[i]-'0')*pow(10.0,k);
                k++;
            }else if(s[i]=='.'){
                num=num*pow(10.0,-k);
                k=0;
            }
            else{
                if(s[i]=='+'&&s[i+1]!=' '){
                    continue;
                }
                if(s[i]=='-'&&s[i+1]!=' '){
                    num=-num;
                    continue;
                }
                if(s[i]==' '){
                    st.push(num);
                    k=num=0;
                    continue;
                }
                if(st.size()<2){
                    break;
                }
                a=st.top();st.pop();
                b=st.top();st.pop();
                if(s[i]=='+'){
                    c=a+b;
                }else if(s[i]=='-'){
                    c=a-b;
                }else if(s[i]=='*'){
                    c=a*b;
                }else if(s[i]=='/'){
                    if(b==0)    break;
                    c=a/b;
                }
                st.push(c);
            }
        }
        if(k){
            st.push(num);
        }
        if(st.size()!=1||i!=-1){
            puts("ERROR");
        }else{
            printf("%.1f
    ",st.top());
        }
        return 0;
    }
    /*
    - / 10 + 3 2 * 2 3
    */
  • 相关阅读:
    一、NHibernate 使用配置与实现简单查询
    NHibernate学习步骤
    sql2008转成2005的解决办法
    二、使用NHibernate对数据库实现增、删、改、查操作
    FusionCharts 点击事件 新页面
    [分享]NHibernate视频教程
    FusionCharts Free使用文档教程第五章FusionCharts Free使用dataXML加载数据
    职业规划
    网页生成pdf文件
    FusionCharts Free使用文档教程第四章FusionCharts Free使用JavaScript加载图形
  • 原文地址:https://www.cnblogs.com/L-King/p/5663702.html
Copyright © 2020-2023  润新知