Pagini recente » Cod sursa (job #1356463) | Cod sursa (job #786750) | Cod sursa (job #2521998) | Cod sursa (job #283062) | Cod sursa (job #2350144)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
char s[100005];
int cautsemn(int st, int dr, char s1, char s2)
{
int nr=0;
for(int i=dr; i>=st; i--)
{
if(s[i] == ')')
nr++;
if(s[i] == '(')
nr--;
if(nr==0 && (s1 == s[i]||s2 == s[i]))
return i;
}
return -1;
}
int num(int st, int dr)
{
int nr=0;
for(int i=st; i<=dr; i++)
nr = nr*10+(s[i]-'0');
return nr;
}
int solve(int st, int dr)
{
int poz = cautsemn(st, dr, '+', '-');
if(poz != -1)
{
int e1 = solve(st, poz-1);
int e2 = solve(poz+1, dr);
if(s[poz] == '+')
return e1+e2;
return e1-e2;
}
poz = cautsemn(st, dr, '*', '/');
if(poz != -1)
{
int e1 = solve(st, poz-1);
int e2 = solve(poz+1, dr);
if(s[poz] == '*')
return e1*e2;
return e1/e2;
}
if(s[st] == '(' && s[dr] == ')')
return solve(st+1, dr-1);
return num(st, dr);
}
int main()
{
ifstream fin("evaluare.in");
fin.getline(s, 100005);
int n = strlen(s);
cout<<solve(0, n-1);
return 0;
}