Pagini recente » Cod sursa (job #2218212) | Cod sursa (job #1404330) | Cod sursa (job #538704) | Cod sursa (job #2310459) | Cod sursa (job #1147547)
#include <fstream>
#include <cstring>
using namespace std;
const int N = 100000, lvMax = 2;
const char lvOp[2][3] = { "+-", "*/" };
char s[N], *poz;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
int expresie(), factor(), termen();
inline bool cifra(char c){
return '0' <= c && c <= '9';
}
inline int getNumber(){
int ans = 0;
while (cifra(*poz)){
ans = ans * 10 + *poz - '0';
poz++;
}
return ans;
}
inline int eval(int a, int b, char op){
if (op == '+')
return a + b;
if (op == '-')
return a - b;
if (op == '*')
return a * b;
if (op == '/')
return a / b;
return -1;
}
int compute(int lv){
if (lv == lvMax){
if (cifra(*poz))
return getNumber();
poz++;
int ans = compute(0);
poz++;
return ans;
}
int ans = compute(lv + 1);
while (*poz && strchr(lvOp[lv], *poz)){
poz++;
ans = eval(ans, compute(lv + 1), *(poz - 1));
}
return ans;
}
int main(){
in >> s;
poz = s;
out << compute(0) << "\n";
return 0;
}