Pagini recente » Monitorul de evaluare | Cod sursa (job #3351670) | Borderou de evaluare (job #1192975) | Cod sursa (job #3354466) | Cod sursa (job #3315243)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
string s;
int poz = 0;
int evaluare();
int factor() {
long long rez = 0;
if(s[poz] == '(') {
poz++;
rez = evaluare();
poz++;
} else {
while(s[poz] >= '0' && s[poz] <= '9') {
rez = rez * 10 + (s[poz] - '0');
poz++;
}
}
return rez;
}
int termen() {
long long f = factor();
while(s[poz] == '*' || s[poz] == '/') {
if(s[poz] == '*') {
poz++;
f = f * factor();
} else if(s[poz] == '/') {
poz++;
f = f / factor();
}
}
return f;
}
int evaluare() {
int rez = termen();
while(s[poz] == '+' || s[poz] == '-') {
if(s[poz] == '-') {
poz++;
rez = rez - termen();
} else if(s[poz] == '+'){
poz++;
rez = rez + termen();
}
}
return rez;
}
int main()
{
fin >> s;
s += '$';
fout << evaluare();
return 0;
}