ちゃっくのメモ帳

ちゃっくがメモしときたいことをメモしとくよ

1桁入力の逆ポーランド記法電卓

今日はハローウィーン。なのにだらだらしてたら夜になっていた。せっかくのハローウィーンなのだから何かしようと思った。

とりあえず逆ポーランド記法電卓でも初めて書いてみた。本当は2桁以上の入力を受けたかったけど面倒くさかったので1桁入力に絞った。splitが使える言語とかだったら楽なのかもしれないけど。。。僕がかろうじて使えるのはC++位だから

まあ調べたらすぐわかるけど、stackに放り込んで演算子が来たら取り出して計算する。最後にstackに残った値が答えになるはず。

適当だからバグってる可能性が高い。

#include <iostream>
#include <string>
#include <stack>
using namespace std;

bool is_operater(char c){
    switch(c){
        case '+':
        case '-':
        case '*':
        case '/':
            return true;
        default:
            return false;
    }
}

int main(){
    stack<int> que;
    string s;
    getline(cin,s);
    
    for(int i=0;i<s.length();i++){
        if(s[i]>='0'&&s[i]<='9') que.push(s[i]-'0');
        if(is_operater(s[i])){
            int n1 = que.top();que.pop();
            int n2 = que.top();que.pop();
            if(s[i]=='+') que.push(n1+n2);
            else if(s[i]=='-') que.push(n1-n2);
            else if(s[i]=='*') que.push(n1*n2);
            else if(s[i]=='/') que.push(n1/n2);
        }
    }
    cout << que.top() << endl;
    return 0;
}