Pagini recente » Cod sursa (job #1042499) | Cod sursa (job #2509402) | Cod sursa (job #2735434) | Cod sursa (job #2888414) | Cod sursa (job #1500648)
#include <iostream>
#include <stack>
#include <fstream>
#include <string.h>
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
stack <char> operatori;
stack <int> numere;
char x[100001];
void calcul ()
{
int n1=numere.top();
numere.pop();
int n2=numere.top();
numere.pop();
char y=operatori.top();
if (y=='+') numere.push(n1+n2);
if (y=='-') numere.push(n2-n1);
if (y=='/') numere.push(n2/n1);
if (y=='*') numere.push(n2*n1);
operatori.pop();
}
int main()
{
fin.getline(x,100001);
int i=0,nr=0;
operatori.push('(');
int p=strlen(x);
while (i<p)
{
if (x[i]=='(')
{
operatori.push(x[i]);
nr=0;
}
else
if (x[i]==')')
{
while (operatori.top()!='(')
calcul ();
operatori.pop();
nr=0;
}
else
if (x[i]=='+'||x[i]=='-')
{
if (operatori.top()!='(') calcul();
operatori.push(x[i]);
nr=0;
}
else
if (x[i]=='*'||x[i]=='/')
{
if (operatori.top()!='(')
if (operatori.top()=='/'||operatori.top()=='*') calcul();
operatori.push(x[i]);
nr=0;
}
else
{
nr=nr*10+(x[i]-'0');
if (nr>=10) numere.pop();
numere.push(nr);
}
i++;
}
while (operatori.top()!='(')
calcul ();
fout<<numere.top();
return 0;
}