Mai intai trebuie sa te autentifici.
Cod sursa(job #1556146)
Utilizator | Data | 24 decembrie 2015 11:25:16 | |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 80 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.49 kb |
#include <fstream>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char sir[100005];
int solve(string exp , int &p);
int getnr(string exp , int &p);
int fact(string exp , int &p);
int term(string exp , int &p);
int main() {
f >> sir;
int pos = 0;
g << solve(sir , pos);
return 0;
}
int solve(string exp , int &p) {
int t1 = term(exp , p);
while(exp[p] == '+' || exp[p] == '-') {
int semn;
if(exp[p] == '+') {
semn = 1;
}
else {
semn = -1;
}
++p;
int t2 = term(exp , p);
t1 += semn * t2;
}
return t1;
}
int term(string exp , int &p) {
int f1 = fact(exp , p);
while(exp[p] == '*' || exp[p] == '/') {
int semn;
if(exp[p] == '*') {
semn = 1;
}
else {
semn = -1;
}
++p;
int f2 = fact(exp , p);
if(semn == 1) {
f1 *= f2;
}
else {
f1 /= f2;
}
}
return f1;
}
int fact(string exp , int &p) {
int rez;
if(exp[p] == '(') {
++p;
rez = solve(exp , p);
++p;
}
else {
rez = getnr(exp , p);
}
return rez;
}
int getnr(string exp , int &p) {
int sol = 0;
while(exp[p] >= '0' && exp[p] <= '9') {
sol = sol * 10 + exp[p] - '0';
++p;
}
return sol;
}