View Code of Problem 94

#include <cstdio>
#include <iostream>
#include <stack>
#include <queue>
#include <cstring>
#include <cmath>
using namespace std;
const int INF=0x3fffffff;
stack<char> st1;
stack<int> st2;
stack<int> snum;
char ss[100]={};
int main(){
	gets(ss);
	int len=strlen(ss);
	for(int i=0;i<len;i++){
		int num=0;
		if(ss[i]-'0'>=0&&ss[i]-'0'<=9){//是数字
			int numsize=0;
			while(ss[i+numsize]-'0'>=0&&ss[i+numsize]-'0'<=9&&i+numsize<len){
				numsize++;
			} 
			int count=0;
			for(int j=numsize;j>0;j--){
				num+=(int)((ss[i+count]-'0')*pow(10,j-1));
				count++;
			}
			st2.push(num);
			i+=numsize-1;
		}
		else if(ss[i]=='('){
			st2.push(INF);
		}
		else if(ss[i]=='+'||ss[i]=='-'||ss[i]=='*'||ss[i]=='/'){
			st1.push(ss[i]);
		}
		else if(ss[i]==')'){
			char app=st1.top();
			st1.pop();
			while(st2.top()!=INF){
				snum.push(st2.top());
				st2.pop();
			}
			st2.pop();//把左括号弹出;
			int sum=snum.top();
			snum.pop();
			while(!snum.empty()){
				if(app=='+'){
					sum+=snum.top();
					snum.pop(); 
					
				}
				else if(app=='-'){
					sum-=snum.top();
					snum.pop(); 
				}
				else if(app=='*'){
					sum*=snum.top();
					snum.pop(); 
				}
				else if(app=='/'){
					sum/=snum.top();
					snum.pop(); 
				}
			}
			st2.push(sum); 
		}	
	}
	if(st1.empty()){
		cout<<st2.top();
	}
} 

Double click to view unformatted code.


Back to problem 94