Pagini recente » Cod sursa (job #221610) | Cod sursa (job #1931007) | Cod sursa (job #2377235) | Cod sursa (job #1960599) | Cod sursa (job #2799342)
#include <bits/stdc++.h>
using namespace std;
ifstream fin( "evaluare.in" );
ofstream fout( "evaluare.out" );
const int NMAX = 1e5;
char s[NMAX + 2];
int p;
int expresie();
int termen();
int factor();
int expresie() {
int nr = termen();
while( s[p] == '+' || s[p] == '-' ){
if( s[p] == '+' ) {
++p;
nr += termen();
}
else {
++p;
nr -= termen();
}
}
return nr;
}
int termen() {
int nr = factor();
while( s[p] == '*' || s[p] == '/' ){
if( s[p] == '*' ){
++p;
nr *= factor();
}
else {
++p;
nr /= factor();
}
}
return nr;
}
int factor() {
int semn = 1;
while( s[p] == '-' ){
++p;
semn = -semn;
}
int nr;
if( s[p] == '(' ){
++p;
nr = expresie();
++p;
}
else {
nr = 0;
while( isdigit(s[p]) )
nr = nr * 10 + (s[p++] - '0');
}
return nr * semn;
}
int main() {
fin >> (1 + s);
p = 1;
fout << expresie();
return 0;
}