Pagini recente » Cod sursa (job #2814637) | Cod sursa (job #2876446) | Cod sursa (job #1104018) | Cod sursa (job #90136) | Cod sursa (job #3352628)
#include <bits/stdc++.h>
using namespace std;
string s;
int i = 0;
long long expresie();
long long termen();
long long factor();
long long expresie()
{
long long val = termen();
while (i < s.size() && (s[i] == '+' || s[i] == '-'))
{
char op = s[i++];
long long val2 = termen();
if (op == '+') val += val2;
else val -= val2;
}
return val;
}
long long termen()
{
long long val = factor();
while (i < s.size() && (s[i] == '*' || s[i] == '/'))
{
char op = s[i++];
long long val2 = factor();
if (op == '*') val *= val2;
else val /= val2; // impartire intreaga
}
return val;
}
long long factor()
{
if (s[i] == '(')
{
i++; // sar peste '('
long long val = expresie();
i++; // sar peste ')'
return val;
}
else
{
long long val = 0;
while (i < s.size() && isdigit(s[i]))
{
val = val * 10 + (s[i] - '0');
i++;
}
return val;
}
}
int main()
{
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
fin >> s;
fout << expresie();
return 0;
}