zoukankan      html  css  js  c++  java
  • 结题报告

    #include <iostream>
    #include <stack>
    #include <cstio>
    #include <cstring>
    using namespace std;
    stack <float> data;
    stack <char> symbol;
    int b[5][6];
    int change(char a){
        int symbol_index;
        switch(a){
            case '+':symbol_index=1;break;
            case '-':symbol_index=2;break;
            case '*':symbol_index=3;break;
            case '/':symbol_index=4;break;
            case '@':symbol_index=5;break;
        }
        return symbol_index;
    }
    int main(){
        memset(b,0,sizeof(b));
        b[3][1]=b[3][2]=b[4][1]=b[4][2]=b[1][5]=b[2][5]=b[3][5]=b[4][5]=1;
        string a;
        cin >> a;
        symbol.push('@');
        float index=0;
        for(int i=0;i<a.length();i++){
            if(a[i]=='#'){
                data.push(index);
                break;
            }
            if(a[i]<='9'&&a[i]>='0'){
                index*=10;
                index+=a[i]-'0';
            }
            else{
                data.push(index);
                index=0;
                int symbol_index;
                symbol_index=change(a[i]);
                while(b[symbol_index][change(symbol.top())]==0){
                    float b=data.top();
                    data.pop();
                    float a=data.top();
                    data.pop();
                    switch(symbol.top()){
                        case '+':data.push(a+b);break;
                        case '-':data.push(a-b);break;
                        case '/':data.push(a/b);break;
                        case '*':data.push(a*b);break;
                    }
                    symbol.pop();
                }
                symbol.push(a[i]);
            }
        }
        while(symbol.top()!='@'){
            float b=data.top();
            data.pop();
            float a=data.top();
            data.pop();
            switch(symbol.top()){
                case '+':data.push(a+b);break;
                case '-':data.push(a-b);break;
                case '/':data.push(a/b);break;
                case '*':data.push(a*b);break;
            }
            symbol.pop();
        }
        printf("%.4f",data.top());
        return 0;
    }

    思路:{

           先读入,再循环{

                 如果是数据,将index变量×10+数据。

                 如果是运算符{

    先将index压入栈data中,再将index归零。

    然后将运算符转换成运算符代码,参见附表1。

    然后分两种情况:{

    1.     symbol栈栈顶运算符优先级没此运算符高:直接压栈。

    2.  否则取出symbol栈栈顶和data栈栈顶(b)和新的栈顶(取出后栈顶后新的栈顶,即取出前从上往下排第二的元素)(a)进行运算,然后再分两种情况考虑。

    }

    }

    如果是#:index压栈,退出循环。

           }

           然后把剩下的计算完。参见2。

    }

    犯的错误:{

    1.     除法应用float类型,我写成int了。

    2.     栈改成int后,其他变量没改。

    3.     #时,index没入栈。(思路中已纠正)。

    }

    收获:{

    1.     注意类型。

    2.     结束时不要想当然地结束循环,而应思考一下还有什么操作。

    }

  • 相关阅读:
    ExtJs gridPanel Column 时间格式化
    Asp.Net MVC结合ExtJs gridPanel 分页和高度自适应
    iOS组件化思路-大神博客研读和思考
    怎么面试架构师
    iOS应用架构谈 本地持久化方案及动态部署
    iOS应用架构谈 网络层设计方案
    iOS应用架构谈 view层的组织和调用方案
    iOS应用架构谈 开篇
    隐藏TabBar是个累人的活
    App升级时数据库的迁移更新
  • 原文地址:https://www.cnblogs.com/eason66-blog/p/eason66-jtbg_blogs.html
Copyright © 2011-2022 走看看