Mai intai trebuie sa te autentifici.
Cod sursa(job #1983441)
| Utilizator | Data | 22 mai 2017 08:01:38 | |
|---|---|---|---|
| Problema | Evaluarea unei expresii | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 1.11 kb |
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
#define ll long long
#define pb push_back
const int NMax = 1e5 + 5;
const int lvlMax = 2;
const char lvlOp[2][3] = {"+-","*/"};
char str[NMax],*p = str;
int eval(int);
int compute(int,int,char);
int main() {
in>>str;
out<<eval(0)<<'\n';
in.close();out.close();
return 0;
}
int eval(int lvl) {
int ans = 0;
if (lvl == lvlMax) {
if (*p == '(') {
++p;
ans = eval(0);
++p;
}
else {
while ('0' <= *p && *p <= '9') {
ans = ans*10 + *p++ - '0';
}
}
}
else {
for (ans = eval(lvl+1); *p != '\0' && strchr(lvlOp[lvl],*p);) {
char op = *p++;
ans = compute(ans,eval(lvl+1),op);
}
}
return ans;
}
int compute(int a,int b,char op) {
switch(op) {
case '+': return a+b;
case '-': return a-b;
case '*': return a*b;
case '/': return a/b;
}
}
