#27227: stack模板..+完整答案


7777jack77 (sheng77)

學校 : 不指定學校
編號 : 141639
來源 : [140.114.196.34]
最後登入時間 :
2023-10-31 19:33:57
f640. 函數運算式求值 -- APCS201902程式實作題3 | From: [36.236.224.212] | 發表日期 : 2021-09-19 20:50

```cpp

#include<bits/stdc++.h>

using namespace std;

                                                //開long long是怕int會爆,我沒看題目最大給多少反正我覺得會爆就直接開long long 這樣比較保險

int F(long long x){                             //F函式

    return (2*x-3);     

}

 

int G(long long x,long long y){                 //G函式

    return (2*x+y-7);

}

 

int H(long long x,long long y,long long z){     //H函式

    return (3*x-2*y+z);

}

 

signed main(){

 

    ios::sync_with_stdio(0);                    //cin cout 加速

    cin.tie(0);

    cout.tie(0);

 

    vector<string> vec;                         //vec 是存輸入的資料的,這邊全部先設定成string,如果是數字的string等等再轉成int就可以囉

    stack<long long>stk;                        //stk是存數字的,一樣直接開long long,我怕爆掉

    

    string s;

    while(cin>>s){                              //沒給輸入多少行,直接用while cin去輸入

        vec.push_back(s);

    }

    int n=vec.size();                           //其實這行好像沒必要寫==,但我懶的改

    for (int i=n-1;i>-1;i--){                   //從vec的後面讀回來   讀完整個vec,且次數是vec的大小

        if (vec[i]=="f"){

            int a;

            a=stk.top();

            stk.pop();

            stk.push(F(a));

        }

        else if (vec[i]=="g"){

            int a,b;

            a=stk.top();

            stk.pop();

            b=stk.top();

            stk.pop();

            stk.push(G(a,b));

        }

        else if(vec[i]=="h"){

            int a,b,c;

            a=stk.top();

            stk.pop();

            b=stk.top();

            stk.pop();

            c=stk.top();

            stk.pop();

            stk.push(H(a,b,c));

        }

        else{                                    //不是f也不是g也不是h 那就是個數字,把這個數字string轉成int

            int tmp;                             //一個用來暫存資料的變數

            tmp=stoi(vec[i]);                    //stoi()可以把string轉int

            stk.push(tmp);

        }

    }

    cout<<stk.top()<<"\n";                       //整個迴圈跑完就剩下一個值在stk中,也就是答案

}

//f640

```

 
ZeroJudge Forum