Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <string>
- using namespace std;
- ifstream cin("azeval.in");
- ofstream cout("azeval.out");
- const int MOD=26;
- string exp;
- int idx;
- int eval();
- int term();
- int factor();
- int power(int base,int exp)
- {
- if(exp==0)return 1;
- if(exp%2==0)
- {
- int x=power(base,exp/2)%MOD;
- return x*x%MOD;
- }
- return base*power(base,exp-1)%MOD;
- }
- int main()
- {
- for(int i=1;i<=3;i++)
- {
- cin>>exp;
- idx=0;
- cout<<(char)(eval()+'a')<<"\n";
- }
- return 0;
- }
- int eval()
- {
- int rsp=term();
- while(exp[idx]=='+' || exp[idx]=='-')
- switch(exp[idx])
- {
- case'+':
- {
- ++idx;
- rsp=(rsp+term())%MOD;
- break;
- }
- case'-':
- {
- ++idx;
- rsp=(rsp-term()+MOD)%MOD;
- break;
- }
- }
- return rsp;
- }
- int term()
- {
- int rsp=factor()%MOD;
- while(exp[idx]=='*' || exp[idx]=='/' || exp[idx]=='%' || exp[idx]=='^')
- switch(exp[idx])
- {
- case'^':
- {
- ++idx;
- rsp=power(rsp,factor())%MOD;
- break;
- }
- case'*':
- {
- ++idx;
- rsp=(rsp*factor())%MOD;
- break;
- }
- case'/':
- {
- ++idx;
- rsp=(rsp/factor())%MOD;
- break;
- }
- case'%':
- {
- ++idx;
- rsp=(rsp%factor())%MOD;
- break;
- }
- }
- return rsp%MOD;
- }
- int factor()
- {
- int rsp=0;
- if(exp[idx]=='(')
- {
- ++idx;
- rsp=eval()%MOD;
- ++idx;
- }
- else
- {
- if(exp[idx]>='a' && exp[idx]<='z')
- {
- rsp=(exp[idx]-'a')%MOD;
- ++idx;
- }
- }
- return rsp%MOD;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement