Pagini recente » Cod sursa (job #985686) | Cod sursa (job #790771) | Cod sursa (job #1686080) | Cod sursa (job #2981524) | Cod sursa (job #3256648)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
const int MAX = 1e5 + 7;
char s[MAX];
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int semn(int st, int dr, char s1, char s2)
{
int nr = 0;
for (int i = dr; i >= st; --i)
{
if (s[i] == ')')
{
++nr;
}
if (s[i] == '(')
{
--nr;
}
if (!nr)
{
if (s[i] == s1 || s[i] == s2)
{
return i;
}
}
}
return -1;
}
int numar(int st, int dr)
{
int nr = 0;
for (int i = st; i <= dr; ++i)
{
nr = nr * 10 + s[i] - '0';
}
return nr;
}
int eval(int st, int dr)
{
int p = semn(st, dr, '+', '-');
if (p != -1)
{
int e1 = eval(st, p - 1);
int e2 = eval(p + 1, dr);
if (s[p] == '+')
{
return e1 + e2;
}
return e1 - e2;
}
p = semn(st, dr, '*', '/');
if (p != -1)
{
int e1 = eval(st, p - 1);
int e2 = eval(p + 1, dr);
if (s[p] == '*')
{
return e1 * e2;
}
return e1 / e2;
}
if (s[st] == '(' && s[dr] == ')')
{
return eval(st + 1, dr - 1);
}
return numar(st, dr);
}
int main()
{
fin.getline(s, MAX);
fout << eval(0, strlen(s) - 1);
return 0;
}