Pagini recente » Cod sursa (job #815226) | Cod sursa (job #1202639) | Cod sursa (job #626209) | Cod sursa (job #1323067) | Cod sursa (job #3302134)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
string s;
int idx = 0;
long long eval();
long long factor()
{
long long rezultat = 0;
if (s[idx] == '(')
{
idx++; /// sarim peste (
rezultat = eval();
idx++; /// sarim peste )
return rezultat;
}
while (idx < s.size() && s[idx] >= '0' && s[idx] <= '9') /// s[idx] - cifra
{
rezultat = rezultat * 10 + s[idx] - '0';
idx++;
}
return rezultat;
}
///234-10+21*12
long long termen()
{
long long rezultat = factor();
while (idx < s.size() && (s[idx] == '*' || s[idx] == '/'))
{
if (s[idx] == '*')
{
idx++;
rezultat *= factor();
}
else
{
idx++;
rezultat /= factor();
}
}
return rezultat;
}
long long eval() /// va evalua rezultatul adunarilor si scaderilor
{
long long rezultat = termen();
while (idx < s.size() && (s[idx] == '+' || s[idx] == '-'))
{
if (s[idx] == '+')
{
idx++;
long long termen2 = termen();
rezultat += termen2;
}
else if (s[idx] == '-')
{
idx++;
long long termen2 = termen();
rezultat -= termen2;
}
}
return rezultat;
}
int main()
{
f >> s;
g << eval();
return 0;
}