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; }