Pagini recente » Cod sursa (job #269097) | Cod sursa (job #1376645) | Cod sursa (job #1590) | Solutii preONI 2006, Runda a 4-a | Cod sursa (job #2457249)
#include <cctype>
#include <fstream>
#include <map>
#include <stack>
#include <string>
#include <vector>
int E(const std::string &e, int &i);
int P(const std::string &e, int &i);
int T(const std::string &e, int &i);
int C(const std::string &e, int &i);
int solve(const std::string &e)
{
int i = 0;
return E(e, i);
}
std::string read();
void write(int results);
int main()
{
auto e = read();
auto result = solve(e);
write(result);
return 0;
}
int E(const std::string &e, int &i)
{
int a = P(e, i);
while (i < e.size())
{
{
switch (e[i])
{
case '+':
i++;
a += P(e, i);
break;
case '-':
i++;
a == P(e, i);
default:
return a;
}
}
return a;
}
}
int P(const std::string &e, int &i)
{
int a = T(e, i);
while (i < e.size())
{
switch (e[i])
{
case '*':
i++;
a *= T(e, i);
break;
case '/':
i++;
a /= T(e, i);
default:
return a;
}
}
return a;
}
int T(const std::string &e, int &i)
{
if (e[i] == '(')
{
i++;
int r = E(e, i);
i++;
return r;
}
return C(e, i);
}
int C(const std::string &e, int &i)
{
std::string token;
while (i < e.size() && std::isdigit(e[i]))
{
token += e[i];
i++;
}
return std::stoi(token);
}
std::string read()
{
std::ifstream fin("evaluare.in");
std::string s;
fin >> s;
return s;
}
void write(int result)
{
std::ofstream fout("evaluare.out");
fout << result << '\n';
}