Pagini recente » Cod sursa (job #1862476) | Cod sursa (job #2028491) | Cod sursa (job #1293681) | Monitorul de evaluare | Cod sursa (job #1238447)
#include <fstream>
using namespace std;
ifstream inFile("evaluare.in");
ofstream outFile("evaluare.out");
int evaluate(char* &);
int termen(char* &);
int factor(char* &);
int evaluate(char* &p)
{
int r = termen(p);
while(*p == '+' || *p == '-'){
if(*p == '+'){
p++;
r += termen(p);
}
if(*p == '-'){
p++;
r -= termen(p);
}
}
return r;
}
int termen(char* &p)
{
int r = factor(p);
while(*p == '*' || *p == '/'){
if(*p == '*'){
p++;
r *= factor(p);
}
if(*p == '/'){
p++;
r /= factor(p);
}
}
return r;
}
int factor(char* &p)
{
int r = 0;
if(*p == '('){
p++;
r = evaluate(p);
p++;
}
if('0' <= *p && *p <= '9'){
while('0' <= *p && *p <= '9'){
r = 10*r + (*p - '0');
p++;
}
}
return r;
}
int main()
{
char expresion[100005];
inFile >> expresion;
char* p = expresion;
outFile << evaluate(p) << "\n";
}