Pagini recente » Cod sursa (job #758722) | Cod sursa (job #570603) | Cod sursa (job #2921308) | Cod sursa (job #1725600) | Cod sursa (job #2923578)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int s_length;
int expresie(const char* s, int& p);
int termen(const char* s, int& p);
int factor(const char* s, int& p);
int numar(const char* s, int& p);
int expresie(const char* s, int& p){
int res = termen(s, p), sign;
while (p < s_length && (s[p] == '+' || s[p] == '-')){
sign = (s[p] == '+' ? 1 : -1);
p++;
res += sign * termen(s, p);
}
return res;
}
int termen(const char* s, int& p){
int res = factor(s, p), aux;
bool mult;
while (p < s_length && (s[p] == '*' || s[p] == '/')){
if (s[p] == '*')
mult = true;
else
mult = false;
p++;
aux = factor(s, p);
if (mult)
res *= aux;
else
res /= aux;
}
return res;
}
int factor(const char* s, int& p){
int res;
if (s[p] == '('){
p++;
res = expresie(s, p);
p++;
}
else
res = numar(s, p);
return res;
}
int numar(const char* s, int& p){
int res = 0, sign;
if (s[p] == '-'){
sign = -1;
p++;
}
else
sign = 1;
while (p < s_length && '0' <= s[p] && s[p] <= '9'){
res = res * 10 + s[p] - '0';
p++;
}
res *= sign;
return res;
}
int main(){
string s;
int p = 0;
fin >> s;
s_length = s.size();
fout << expresie(s.c_str(), p) << "\n";
return 0;
}