Pagini recente » Cod sursa (job #3139240) | Cod sursa (job #888012) | Cod sursa (job #87982) | Cod sursa (job #443183) | Cod sursa (job #3234509)
//https://infoarena.ro/problema/evaluare
#pragma GCC optimize ("Ofast")
#pragma GCC optimize ("fast-math")
#pragma GCC optimize ("unroll-loops")
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int i;
string s;
int f1();
int f2();
int f3();
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
fin >> s;
fout << f1();
//fout << "\n" << i;
return 0;
}
int f1()
{
int r = f2();
while (s[i] == '+' || s[i] == '-')
{
if (s[i] == '+')
{
++i;
r += f2();
}
else //if (s[i] == '-')
{
++i;
r -= f2();
}
if (i >= s.size())
{
break;
}
}
return r;
}
int f2()
{
int r = f3();
while (s[i] == '*' || s[i] == '/')
{
if (s[i] == '*')
{
++i;
r *= f3();
}
else //if(s[i] == '/')
{
++i;
r /= f3();
}
if (i >= s.size())
{
break;
}
}
return r;
}
int f3()
{
int r;
if (s[i] == '(')
{
++i;
r=f1();
++i;
}
else //s[i] e cifra
{
r = 0;
while (s[i] >= '0' && s[i] <= '9')
{
r = r * 10 + s[i] - '0';
++i;
if (i >= s.size())
{
break;
}
}
//cout << r << " ";
}
return r;
}