Pagini recente » Cod sursa (job #2916415) | Cod sursa (job #2902812) | Cod sursa (job #2245086) | Cod sursa (job #843278) | Cod sursa (job #2237826)
#include <iostream>
#include <cstring>
#include <fstream>
#define ifnt else
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
char s[100041];
int n;
int f(char s[], int st, int dr)
{
int depth = 0;
for(int i = dr; i >= st; i--)
{
if(s[i] == '+' && depth == 0)
{
return f(s, st, i-1) + f(s, i+1, dr);
}
ifnt if(s[i] == '-' && depth == 0)
return f(s, st, i-1) - f(s, i+1, dr);
ifnt if(s[i] == ')')
depth++;
ifnt if(s[i] == '(')
depth--;
}
for(int i = dr; i >= st; i--)
{
if(s[i] == '*' && depth == 0)
{
return f(s, st, i-1) * f(s, i+1, dr);
}
ifnt if(s[i] == '/' && depth == 0)
return f(s, st, i-1) / f(s, i+1, dr);
ifnt if(s[i] == ')')
depth++;
ifnt if(s[i] == '(')
depth--;
}
if(s[st] == '(' && s[dr] == ')')
return f(s, st+1, dr-1);
ifnt{
int r = 0;
while(st <= dr)
{
if(s[st] >= '0' && s[st] <= '9')
r = r*10 + (s[st]-'0');
st++;
}
return r;
}
}
int main()
{
fin.getline(s, 100041);
n = strlen(s);
int rez = f(s, 0, n-1);
fout << rez;
return 0;
}