Pagini recente » Cod sursa (job #2230138) | Cod sursa (job #2881246) | Cod sursa (job #1622927) | Cod sursa (job #515513) | Cod sursa (job #1243136)
#include <cstdio>
#define NMAX 100005
#define isDigit(x) ((x) >= '0' && (x) <= '9')
using namespace std;
char expr[NMAX];
int solve(int &pos);
int parseInt(int &pos)
{
int res = 0;
while(isDigit(expr[pos]))
{
res = res * 10 + expr[pos] - '0';
pos++;
}
return res;
}
int compute(int a, int b, char c)
{
switch(c){
case '+' : return a + b;
case '-' : return a - b;
case '*' : return a * b;
case '/' : return a / b;
default : return 0;
}
}
int getFirstThing(int &pos, char prev)
{
int res = 0;
if(isDigit(expr[pos]))
res = parseInt(pos);
else if(expr[pos] == '(')
{
pos++;
res = solve(pos);
}
if(prev == '*' || prev == '/')
return res;
if(expr[pos] == '*')
{
pos++;
return res * getFirstThing(pos, '*');
}
else if(expr[pos] == '/')
{
pos++;
return res / getFirstThing(pos, '/');
}
return res;
}
int solve(int &pos)
{
int a = 0, b = 0;
char c = '+';
while(c != '\0' && c != ')')
{
b = getFirstThing(pos, c);
switch(c)
{
case '+' : a += b; break;
case '-' : a -= b; break;
case '*' : a *= b; break;
case '/' : a /= b; break;
}
c = expr[pos];
pos++;
}
return a;
}
void read()
{
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
scanf("%s", expr);
}
int main() {
int pos = 0;
read();
int rez = solve(pos);
printf("%d", rez);
return 0;
}