#12694: C++ AC code


SeanYang (Zoooonda)

學校 : 不指定學校
編號 : 11057
來源 : [114.41.127.201]
最後登入時間 :
2017-09-20 11:50:00
d016. 後序運算法 | From: [114.38.97.214] | 發表日期 : 2017-09-12 23:16

google "C++ stack", "C++ stringstream"學到的

關於後序運算式 https://market.cloud.edu.tw/content/senior/computer/ks_ks/et/datastruct/compute/compute.htm

 

#include <iostream>
#include <stack>
#include <sstream>

using namespace std;

int main(int argc, char *argv[]){
    string ins;
    int op1, op2, ans, i, j, k;
    stringstream ss;

    while(getline(cin, ins)){
        i = j = k = 0;
        stack<int>myStack;
        while(i<ins.length()){
            if(ins[i] >= '0' && ins[i] <= '9'){                   // 數字
                for(j=i+1; j<ins.length(); j++)               //找出所在區段
                    if(ins[j] == ' ')
                        break;
                string tmp = ins.substr(i, j-i);             //用substr抓出數字
                ss.str("");
                ss.clear();                                      //google到的結果說要這樣清空
                ss << tmp;
                ss >> op1;
                myStack.push(op1);
                i = j;
                i++;
            }
            else if(ins[i] == '+'){
                op2 = myStack.top();
                myStack.pop();
                op1 = myStack.top();
                myStack.pop();
                myStack.push(op1+op2);
                i+=2;
            }
            else if(ins[i] == '-'){
                op2 = myStack.top();
                myStack.pop();
                op1 = myStack.top();
                myStack.pop();
                myStack.push(op1-op2);
                i+=2;
            }
            else if(ins[i] == '*'){
                op2 = myStack.top();
                myStack.pop();
                op1 = myStack.top();
                myStack.pop();
                myStack.push(op1*op2);
                i+=2;
            }
            else if(ins[i] == '/'){
                op2 = myStack.top();
                myStack.pop();
                op1 = myStack.top();
                myStack.pop();
                myStack.push(op1/op2);
                i+=2;
            }
            else if(ins[i] == '%'){
                op2 = myStack.top();
                myStack.pop();
                op1 = myStack.top();
                myStack.pop();
                myStack.push(op1%op2);
                i+=2;
            }
        }
        cout<<myStack.top()<<endl;
    }

    return 0;

 

供參考~如果這題有「負數」的話就更麻煩了@@

 
ZeroJudge Forum