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

结题报告

时间:2019-12-30 18:59:53      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:cin   情况   tac   ack   inf   color   logs   stack   view   

#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.     结束时不要想当然地结束循环,而应思考一下还有什么操作。

}

结题报告

标签:cin   情况   tac   ack   inf   color   logs   stack   view   

原文地址:https://www.cnblogs.com/eason66-blog/p/eason66-i-beta_blogs.html

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