報告書を締結

#include <iostreamの> 
する#include <スタック> 
の#include <cstio> 
の#include <CStringの>
 使用して 名前空間をSTD。
スタック < フロート > データ; 
スタック < チャー > 記号。
int型 B [ 5 ] [ 6 ]。
INTの変化(チャーA){
     int型symbol_index。
    スイッチ(){
         ケース ' + ':symbol_index = 1休憩;
        ケース " -":symbol_index = 2 ; 休憩;
        ケース ' * ':symbol_index = 3 ; 休憩;
        ケース ' / ':symbol_index = 4休憩;
        ケース ' @ ':symbol_index = 5 ; 休憩; 
    } 
    戻り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 文字列A; 
    cinを >> ; 
    symbol.push(' @ ' );
    フロートインデックス= 0 以下のためにINT iが= 0 ; I <a.lengthを(); I ++ ){
         もし([I] == ' ' ){ 
            data.push(インデックス)
            休憩; 
        } 
        もし([I] <= ' 9 ' && [I]> = ' 0 ' ){ 
            指数 * = 10 
            インデックス + = [I] - ' 0 ' 
        } 
        { 
            data.push(インデックス)
            インデックス = 0 ;
            int型symbol_index; 
            symbol_index = 変化([I])。
            同時に(B [symbol_index] [変更(symbol.top())] == 0 ){
                 フロート B = data.top()。
                data.pop(); 
                フロート A = data.top()。
                data.pop(); 
                スイッチ(symbol.top()){
                     ケース ' + ':data.push(+ b)は、休憩;
                    ケース ' - ':data.push(AB); 休憩;
                    ケース ' / ':data.push(/ B)。休憩;
                    ケース * :data.push(* B)。休憩; 
                } 
                )(symbol.pop。
            } 
            symbol.push([I])。
        } 
    } 
    一方(symbol.top()!= ' @ ' ){
         フロート B = data.top()。
        data.pop(); 
        フロート A = data.top()。
        data.pop(); 
        スイッチ(symbol.top()){
             ケース ' + ':data.push(+ b)は、休憩;
            ケース ' - ':data.push(AB); ブレーク;
            ケース ' / ':data.push(/ B)。休憩;
            ケース ' * ':data.push(* B)。休憩; 
        } 
        )(symbol.pop。
    } 
    のprintf(" %の.4f " 、data.top())。
    リターン 0 ; 
}

 

アイデア:{

       最初は、再循環を読み取ります{

             データの場合、インデックス変数× 10+データ。

             もしオペレータ{

最初のインデックスはスタック上にプッシュデータ、その後にインデックスゼロ。

オペレータは、その後、コードオペレータに変換され、表参照1。

次いで、2例:{

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

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

}

}

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

       }

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

}

犯的错误:{

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

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

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

}

收获:{

1.     注意类型。

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

}

おすすめ

転載: www.cnblogs.com/eason66-blog/p/eason66-i-beta_blogs.html