Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。
・問題 "Smart Calculator"
https://onlinejudge.u-aizu.ac.jp/problems/0109
・スマート計算機
僕が作成、提出したコードは、以下のとおりです。
・Aizu Online Judge in C++ #Volume1 - 0109 : Smart Calculator
/* Aizu Online Judge in C++ #Volume1 - 0109 : Smart Calculator https://onlinejudge.u-aizu.ac.jp/problems/0109 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll n,k,ans; string s; ll f1(void); ll f2(void); ll f3(void); ll f1(void){ ll r; r=f2(); while(s[k]=='+' || s[k]=='-'){ if(s[k]=='+'){ k++; r+=f2(); }else if(s[k]=='-'){ k++; r-=f2(); } } return r; } ll f2(void){ ll r; r=f3(); while(s[k]=='*' || s[k]=='/'){ if(s[k]=='*'){ k++; r*=f3(); }else if(s[k]=='/'){ k++; r/=f3(); } } return r; } ll f3(void){ ll r; if(s[k]=='('){ k++; r=f1(); k++; }else{ r=0; while('0'<=s[k] && s[k]<='9'){ r*=10; r+=s[k]-'0'; k++; } } return r; } int main(void){ cin>>n; while(n--){ ans=0,k=0; cin>>s; ans=f1(); cout<<ans<<endl; s.clear(); } return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/