0109:Smart Calculator

問題文
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0109&lang=jp




























構文解析の基本。
https://gist.github.com/draftcode/1357281
↑にわかりやすい解説が書いてるので参考にした。

#include<iostream>
#include<algorithm>
#include<string>

using namespace std;

int expression();
int term();
int factor();
int number();

int now;
string s;

int expression(){
	int res=term();
		while(true){
		if(s[now]=='+')now++,res+=term();
		else if(s[now]=='-')now++,res-=term();
		else break;
	}
	return res;
}

int term(){
	int res=factor();
	while(true){
		if(s[now]=='(')res+=factor();
		else if(s[now]=='*')now++,res*=factor();
		else if(s[now]=='/')now++,res/=factor();
		else break;
	}
	return res;
}

int factor(){
	int res=0;
	if(s[now]=='(')now++,res=expression(),now++;
	else return number();
	return res;
}

int number(){
	int res=0;
	while('0'<=s[now] && s[now]<='9')res*=10,res+=s[now++]-'0';
	return res;
}


int main(void){
	int n;
	cin >> n;
	
	while(n--){
		cin >> s;
		now=0;
		cout << expression() << endl;
	}
	
	return 0;
}