Pagini recente » Cod sursa (job #1079344) | Cod sursa (job #1852105) | Cod sursa (job #3190490) | Cod sursa (job #741615) | Cod sursa (job #1478780)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
const int nmax = 100005;
const int lmax = 2;
char s[nmax];
char op[4][4] = {"+-", "*/", "^", ""};
int i, eval(int);
int operation(int a, int b, char c)
{
if(c=='+') return a+b;
if(c=='-') return a-b;
if(c=='*') return a*b;
if(c=='/') return a/b;
return 0;
}
int number()
{
int x=0;
if(s[i]=='(')
{
i++;
x=eval(0);
i++;
}
else for(x=0; s[i]>='0' && s[i]<='9'; i++)
x=x*10+(s[i]-'0');
return x;
}
int eval(int level)
{
int x;
if(level==lmax) x=number();
else x=eval(level+1);
while(strchr(op[level], s[i]))
x=operation(x, eval(level+1), s[++i-1]);
return x;
}
int main()
{
fgets(s, 100010, fopen("evaluare.in", "r"));
fprintf(fopen("evaluare.out", "w"), "%d\n", eval(0));
return 0;
}