Pagini recente » Cod sursa (job #2851570) | Arhiva de probleme | Cod sursa (job #1520504) | Cod sursa (job #1090914) | Cod sursa (job #3182129)
//Rares 0net
using namespace std;
#ifdef RS
#include "Rares0.hpp"
#else
#include<string>
#include<fstream>
#include<algorithm>
const string N_file="evaluare";
ifstream fin(N_file+".in");
ofstream fout(N_file+".out");
#define cin fin
#define cout fout
#endif
#define endl '\n'
#define pb push_back
#define mp make_pair
#define mt make_tuple
#define f first
#define s second
#define INF 0x3f3f3f3f
void RSinit()
{
cin.tie(0)->sync_with_stdio(false);
cout.tie(0);
}
string str;
int SenmFinding(int st, int dr, char s1, char s2)
{
int ct=0;
for(int i=dr; i>=st; --i)
{
if(str[i]==')')
ct++;
if(str[i]=='(')
ct--;
if(!ct && (s1==str[i] || s2==str[i]))
return i;
}
return -1;
}
int formNum(int st, int dr)
{
int ans=0;
for(int i=st; i<=dr; ++i)
ans=ans*10+(str[i]-'0');
return ans;
}
int RecSolve(int st, int dr)
{
if(st > dr) return 0;
int pos=SenmFinding(st, dr, '+', '-');
if(pos!=-1)
{
int e1=RecSolve(st, pos-1);
int e2=RecSolve(pos+1, dr);
return (str[pos]=='+' ? e1+e2 : e1-e2);
}
pos=SenmFinding(st, dr, '*', '/');
if(pos!=-1)
{
int e1=RecSolve(st, pos-1);
int e2=RecSolve(pos+1, dr);
return (str[pos]=='*' ? e1*e2 : e1/e2);
}
if(str[st]=='(' && str[dr]==')')
return RecSolve(st+1, dr-1);
return formNum(st, dr);
}
void Read()
{
getline(cin, str);
}
void Solve()
{
cout<<RecSolve(0, (int)str.size()-1);
}
main()
{
RSinit();
Read();
Solve();
}