Pagini recente » Cod sursa (job #2492326) | Cod sursa (job #1875159) | Cod sursa (job #819737) | Cod sursa (job #43551) | Cod sursa (job #3192656)
#include <iostream>
#include <fstream>
#include <string>
#include <ctype.h>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
/// recursivitate indirecta trebuie declarate toate functiile la inceput
char s[1000005];
int pos = 0;
int add(); // se ocupa de + si -
int mult(); // * /
int fact(); // () si factori
int main (){
in >> s;
out << add();
return 0;
}
int add (){
int res = mult();
while (s[pos] == '+' || s[pos] == '-'){
if (s[pos] == '+'){
pos++;
res += mult();
}
else{
pos++;
res -= mult();
}
}
return res;
}
int mult(){
int res = fact();
while (s[pos] == '*' || s[pos] == '/'){
if (s[pos] == '*'){
pos++;
res *= fact();
}
else{
pos++;
res /= fact();
}
}
return res;
}
int fact(){
int res = 0;
if (s[pos] == '('){
pos++;
res = add();
pos++;
}
else{
while (isdigit(s[pos])){
res = res * 10 + (s[pos] - '0');
pos++;
}
}
return res;
}