Pagini recente » Rezultatele filtrării | Cod sursa (job #1329823) | Cod sursa (job #1198100) | Cod sursa (job #343103) | Cod sursa (job #3302178)
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
string s;
long long idx;
long long eval();
long long factor ()
{
if ( s[idx] == '(')
{
idx++;
long long fact = eval();
idx++;
return fact;
}
long long fact = 0;
while (idx < s.size() && s[idx] >= '0' && s[idx] <= '9')
{
fact = fact * 10 + s[idx] - '0';
idx++;
}
return fact;
}
long long termen()
{
long long rez = factor();
while (idx < s.size() && ( s[idx] == '*' || s[idx] == '/'))
{
if ( s[idx] == '*')
{
idx++;
rez = rez * factor();
}
else if (s[idx] == '/')
{
idx++;
rez = rez / factor();
}
}
return rez;
}
long long eval()
{
long long sum = termen();
while ( idx < s.size() && ( s[idx] == '+' || s[idx] == '-' ) )
{
if ( s[idx] == '+')
{
idx++;
sum = sum + termen();
}
else if (s[idx] == '-')
{
idx++;
sum = sum - termen();
}
}
return sum;
}
int main()
{
f >> s;
g << eval() << "\n";
return 0;
}