Pagini recente » Cod sursa (job #1052423) | Borderou de evaluare (job #2012052) | Cod sursa (job #701782) | Cod sursa (job #2604237) | Cod sursa (job #1302436)
#define IA_PROB "evaluare"
#include <fstream>
#include <cstdio>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
using namespace std;
int eval(string &s, int &p);
int factor(string &s, int &p)
{
int res;
if (s[p] == '(') {
p++;
res = eval(s, p);
p++; /* to skip over ')' */
} else {
res = 0;
while (s[p] >= '0' && s[p] <= '9') {
res = res * 10 + s[p] - '0';
p++;
}
}
return res;
}
int term(string &s, int &p)
{
int a = factor(s, p);
while (s[p] == '*' || s[p] == '/') {
char op = s[p];
p++;
int b = factor(s, p);
if (op == '*') {
a *= b;
} else {
a /= b;
}
}
return a;
}
int eval(string &s, int &p)
{
int a = term(s, p);
while (s[p] == '+' || s[p] == '-') {
char op = s[p];
p++;
int b = term(s, p);
if (op == '+') {
a += b;
} else {
a -= b;
}
}
return a;
}
int main()
{
ifstream in(IA_PROB".in");
ofstream out(IA_PROB".out");
int p;
string s;
in>>s;
out<<eval(s, p);
if (p != s.size()) {
out<<"Error: read only "<<p<<" out of "<<s.size()<<" characters.";
}
return 0;
}