Pagini recente » Cod sursa (job #1962514) | preONI 2005 runda #1 - solutii | Cod sursa (job #1971556) | Cod sursa (job #2085691) | Cod sursa (job #2048976)
#include <fstream>
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
char c[100002];
int i = 1;
int evaluare ();
int termen ();
int factor ();
int evaluare () { //se ocupa de adunare si scadere
int r = termen ();
while (c[i] == '+' || c[i] == '-') {
if (c[i] == '+') {
++ i;
r += termen ();
}
else {
++ i;
r -= termen ();
}
}
return r;
}
int termen () { //se ocupa de inmultire si impartire
int r = factor ();
while (c[i] == '*' || c[i] == '/') {
if (c[i] == '*') {
++ i;
r *= factor ();
}
else {
++ i;
r /= factor ();
}
}
return r;
}
int factor () { //se ocupa de paranteze si creerea numerelor in baza 10
int r = 0;
if (c[i] == '(') {
++ i;
r = evaluare (); //daca se deschide o paranteza, evaluam ce este in interiorul
++ i; //acelei paranteze prima data, apoi adaugam 1 la i sa trecem peste ')'
}
else {
while (c[i] >= '0' && c[i] <= '9') {
r = r * 10 + c[i] - '0';
++ i;
}
}
return r;
}
int main () {
fin >> c + 1;
fout << evaluare ();
return 0;
}