Pagini recente » Cod sursa (job #1127097) | Cod sursa (job #2594908) | Cod sursa (job #3121468) | Cod sursa (job #3214969) | Cod sursa (job #2991239)
#include <bits/stdc++.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100005];
stack<int>nr;
stack<char>op;
void numere(int i)
{
if(nr.empty())
{
nr.push(s[i] - '0');
}else if(s[i-1] >= '0' && s[i-1] <='9')
{
int cop = nr.top();
nr.pop();
cop = cop * 10 + (s[i] - '0');
nr.push(cop);
}else{
nr.push(s[i] - '0');
}
}
void calcule(int nr1, int nr2)
{
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);
}
}
void semne(int i)
{
if(s[i] == '(')
{
op.push(s[i]);
}else if(s[i] == ')')
{
while(op.top()!='(')
{
int nr1 =nr.top();
nr.pop();
int nr2 = nr.top();
nr.pop();
calcule(nr1,nr2);
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();
calcule(nr1,nr2);
op.pop();
}
}
int main()
{
f.get(s,100001);
int lung = strlen(s);
s[lung] = ')';
s[lung+1] = NULL;
op.push('(');
for(int i=0;i<=lung;i++)
{
if(s[i] >= '0' && s[i] <='9')
{
numere(i);
}else{
semne(i);
}
}
//check();
g << nr.top();
return 0;
}