AOJ 0109: Smart Calculator
実装するだけですが、こういうの(構文解析?)に慣れてないから、実装が結構難しかったです。
整数が1桁だと思い込んでいるとWAします。
#include <iostream> #include <string> using namespace std; string s; int single(int& pos); int figure(int& pos); int solve(int& pos); int main(){ int T; cin>>T; for(int i = 0; i < T; i++){ cin>>s; int pos = 0; cout<<solve(pos)<<endl; } return 0; } int single(int& pos){//数値を返したりする関数 if(s[pos]!='('){ int res = 0; while('0'<=s[pos] && s[pos]<='9'){ res *= 10; res += s[pos]-48; pos++; } return res; }else{ return solve(++pos); } } int figure(int& pos){//掛け算・割り算をする関数 int res = single(pos); while(1){ if(s[pos]=='*'){ res *= single(++pos); }else if(s[pos]=='/'){ res /= single(++pos); }else { return res; } } } int solve(int& pos){//式全体を計算する関数(カッコ内の計算も一つの式とみなす) int res = figure(pos); while(s[pos]!='=' && s[pos]!=')'){ if(s[pos]=='+') res += figure(++pos); else if(s[pos]=='-') res -= figure(++pos); } pos++; return res; }