Pagini recente » Cod sursa (job #1420609) | Cod sursa (job #3041080) | Cod sursa (job #914327) | Cod sursa (job #1987187) | Cod sursa (job #1358102)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
ifstream F("evaluare.in");
ofstream G("evaluare.out");
const int N = 100010;
char expr[N];
int eval(char*&);
int fact(char*&);
int term(char*&);
int term(char* &x)
{
int ans = 0;
if ( *x == '(' )
{
++x;
ans = eval(x);
++x;
}
else
for (;*x >= '0' && *x <= '9';++x)
ans = ans * 10 + int(*x - '0');
return ans;
}
int fact(char* &x)
{
int ans = term(x);
while ( *x == '*' || *x == '/' )
{
int sgn = *x == '*' ? 1 : -1;
++x;
ans = sgn == 1 ? ans * term(x) : ans / term(x);
}
return ans;
}
int eval(char* &x)
{
int ans = fact(x);
while ( *x == '+' || *x == '-' )
{
int sgn = *x == '+' ? 1 : -1;
++x;
ans += sgn * fact(x);
}
return ans;
}
int main()
{
F>>expr;
char *x = expr;
G<<eval(x)<<'\n';
}