Advertisement
As932

azeval

May 20th, 2020
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.01 KB | None | 0 0
  1. #include <fstream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. ifstream cin("azeval.in");
  7. ofstream cout("azeval.out");
  8.  
  9. const int MOD=26;
  10.  
  11. string exp;
  12. int idx;
  13.  
  14. int eval();
  15. int term();
  16. int factor();
  17.  
  18. int power(int base,int exp)
  19. {
  20.     if(exp==0)return 1;
  21.     if(exp%2==0)
  22.     {
  23.         int x=power(base,exp/2)%MOD;
  24.         return x*x%MOD;
  25.     }
  26.     return base*power(base,exp-1)%MOD;
  27. }
  28.  
  29. int main()
  30. {
  31.     for(int i=1;i<=3;i++)
  32.     {
  33.         cin>>exp;
  34.         idx=0;
  35.         cout<<(char)(eval()+'a')<<"\n";
  36.     }
  37.     return 0;
  38. }
  39.  
  40. int eval()
  41. {
  42.     int rsp=term();
  43.  
  44.     while(exp[idx]=='+' || exp[idx]=='-')
  45.         switch(exp[idx])
  46.         {
  47.             case'+':
  48.             {
  49.                 ++idx;
  50.                 rsp=(rsp+term())%MOD;
  51.                 break;
  52.             }
  53.             case'-':
  54.             {
  55.                 ++idx;
  56.                 rsp=(rsp-term()+MOD)%MOD;
  57.                 break;
  58.             }
  59.         }
  60.  
  61.     return rsp;
  62. }
  63.  
  64. int term()
  65. {
  66.     int rsp=factor()%MOD;
  67.  
  68.     while(exp[idx]=='*' || exp[idx]=='/' || exp[idx]=='%' || exp[idx]=='^')
  69.         switch(exp[idx])
  70.         {
  71.             case'^':
  72.             {
  73.                 ++idx;
  74.                 rsp=power(rsp,factor())%MOD;
  75.                 break;
  76.             }
  77.             case'*':
  78.             {
  79.                 ++idx;
  80.                 rsp=(rsp*factor())%MOD;
  81.                 break;
  82.             }
  83.             case'/':
  84.             {
  85.                 ++idx;
  86.                 rsp=(rsp/factor())%MOD;
  87.                 break;
  88.             }
  89.             case'%':
  90.             {
  91.                 ++idx;
  92.                 rsp=(rsp%factor())%MOD;
  93.                 break;
  94.             }
  95.         }
  96.     return rsp%MOD;
  97. }
  98.  
  99. int factor()
  100. {
  101.     int rsp=0;
  102.  
  103.     if(exp[idx]=='(')
  104.     {
  105.         ++idx;
  106.         rsp=eval()%MOD;
  107.         ++idx;
  108.     }
  109.     else
  110.     {
  111.         if(exp[idx]>='a' && exp[idx]<='z')
  112.         {
  113.             rsp=(exp[idx]-'a')%MOD;
  114.             ++idx;
  115.         }
  116.     }
  117.     return rsp%MOD;
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement