Pagini recente » Cod sursa (job #122856) | Cod sursa (job #1645596) | Cod sursa (job #2863314) | Cod sursa (job #329025) | Cod sursa (job #2991079)
#include <iostream>
#include <fstream>
#include <stack>
#include <cstring>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100005];
stack <int> nr;
stack <char> op;
int ind;
void numere(int i)
{
if (nr.empty())
{
nr.push(s[i] - '0');
}
else if (s[i - 1] >= '0' && s[i - 1] <= '9') {
int nou = nr.top();
nr.pop();
nou = nou * 10 + (s[i] - '0');
nr.push(nou);
}
else {
nr.push(s[i] - '0');
}
}
void semne(int i)
{
if (s[i] == '(')
{
op.push('(');
}
else if (s[i] == ')')
{
while (op.top() != '(')
{
int nr1 = nr.top();
nr.pop();
int nr2 = nr.top();
nr.pop();
if (op.top() == '+')
{
nr.push(nr1 + nr2);
}
else {
nr.push(nr2 - nr1);
}
op.pop();
}
op.pop();
}
else if (op.top() == '*' || op.top() == '/')
{
int nr1 = nr.top();
nr.pop();
int nr2 = nr.top();
nr.pop();
if (op.top() == '*')
{
nr.push(nr1 * nr2);
}
else {
nr.push(nr2 / nr1);
}
op.pop();
op.push(s[i]);
}
else {
op.push(s[i]);
}
}
void check()
{
while (op.size() > 1)
{
int nr1 = nr.top();
nr.pop();
int nr2 = nr.top();
nr.pop();
if (op.top() == '*')
{
nr.push(nr1 * nr2);
}
else if(op.top() == '/'){
nr.push(nr2 / nr1);
}else if (op.top() == '+')
{
nr.push(nr1 + nr2);
}
else {
nr.push(nr2 - nr1);
}
op.pop();
}
}
int main()
{
f.get(s, 100001);
int lung = strlen(s);
op.push('(');
for (int i = 0; i <= lung - 1; i++)
{
if (s[i] >= '0' && s[i] <= '9')
{
numere(i);
}
else {
semne(i);
}
}
check();
g << nr.top();
return 0;
}