View Code of Problem 94

#include<iostream>
#include<stack>
using namespace std;
int cal(stack<int>n2,char op){
	while(n2.size()!=1){
		int left=n2.top();
		n2.pop();
		int right=n2.top();
		n2.pop();
		switch(op){
					case'+':
						n2.push(left+right);
						break;
					case'-':
						n2.push(left-right);
						break;
					case'*':
						n2.push(left*right);
						break;
					case'/':
						n2.push(left/right);
				}
		}
		return n2.top();
}
int main(){
	string s;
	while(getline(cin,s)){
		stack<char>n;
		stack<char>o;
		string num="";
		for(int i=0;i<s.length();i++){
			if(s[i]=='('){
				n.push(s[i]);
			}
			else if(s[i]>='0' && s[i]<='9'){
				num.push_back(s[i]);
			}
			else if(s[i]=='+' || s[i]== '*' || s[i]=='-' || s[i]=='/'){
				o.push(s[i]);
			}
			else if(s[i]==' '){
				if(num!=""){
					n.push(stoi(num));
					num="";
				}
			}
			else{
				if(num!=""){
					n.push(stoi(num));
					num="";
				}
				char op=o.top();
				o.pop();
				stack<int>n1;
				while(n.top()!='('){
					n1.push(n.top());
					n.pop();
				}
				n.pop();
				int res=cal(n1,op);
				n.push(res);
				}
			}
			printf("%d\n",n.top());
		}
}

Double click to view unformatted code.


Back to problem 94