#21400: better than you asfhiol !!!


lj08197@stu.kcislk.ntpc.edu.tw (陳羿霏Marc Chen)

學校 : 康橋雙語學校
編號 : 101554
來源 : [88.98.207.216]
最後登入時間 :
2024-01-01 01:53:03
a017. 五則運算 | From: [119.77.233.49] | 發表日期 : 2020-05-26 20:38

#include<iostream>
#include<cstring>
#include<cctype>
#include<string>
using namespace std;
int DFS(int,int);
string s;
int main()
{
 while(getline(cin,s))
 {
     int result=DFS(0,s.length());
     cout << result <<endl;
   }
}
int DFS(int le,int ri)
{
 int c=0, n=0;
 for(int i=ri-1;i>=le;--i)
 { 
     if (s[i]==')')
   ++c;  
     if (s[i]=='(')
   --c;
     if (s[i]=='+' && c==0)
        return DFS(le,i)+DFS(i+1,ri);
     if (s[i]=='-' && c==0)
        return DFS(le,i)-DFS(i+1,ri);
   }   
   for(int i=ri-1;i>=le;--i)
   { 
     if (s[i]==')')
   ++c;        
     if (s[i]=='(')
   --c;
     if (s[i]=='*' && c==0)
        return DFS(le,i)*DFS(i+1,ri);
     if (s[i]=='/' && c==0)
        return DFS(le,i)/DFS(i+1,ri);
     if (s[i]=='%' && c==0)
       return DFS(le,i)%DFS(i+1,ri);
   }   
   if ((s[le]=='(')&&(s[ri-1]==')'))
    return DFS(le+1,ri-1);
   if (s[le]==' ' &&s[ri-1]==' ')
    return  DFS(le+1,ri-1); 
   if (s[le]==' ')
    return  DFS(le+1,ri); 
   if (s[ri-1]==' ')
    return  DFS(le,ri-1);
   if (isdigit(s[le])&&isdigit(s[ri-1]))
   {
     for(int i=le;i<ri;++i)
   n=n*10+s[i]-'0';
      return n;
   }
}

 
ZeroJudge Forum