Pagini recente » Cod sursa (job #2665649) | Cod sursa (job #2295663) | Cod sursa (job #2567754) | Cod sursa (job #633956) | Cod sursa (job #1365807)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
const int NMax = 100010;
char s[NMax];
int poz;
int N;
int expr();
int termen();
int factor();
int expr()
{
/// foloseste termen
int t = termen();
while (s[poz] == '+' || s[poz] == '-')
{
++ poz;
if (s[poz - 1] == '+')
t += termen();
else
t -= termen();
}
return t;
}
int termen()
{
/// foloseste factor
int f = factor();
while (s[poz] == '*' || s[poz] == '/')
{
++ poz;
if (s[poz - 1] == '*')
f *= factor();
else
f /= factor();
}
return f;
}
int factor ()
{
/// foloseste expr
int x = 0;
if (s[poz] == '(')
{
++ poz;
x = expr();
++ poz;
}
else
{
/// cu siguranta avem un numar
while ('0' <= s[poz] && s[poz] <= '9' && poz <= N)
{
x = x * 10 + s[poz] - '0';
poz ++ ;
}
}
return x;
}
int main()
{
ifstream f("evaluare.in");
f >> (s+1);
N = strlen(s+1);
f.close();
poz = 1;
ofstream g("evaluare.out");
g << expr() << "\n";
g.close();
return 0;
}