Pagini recente » Cod sursa (job #1141957) | Cod sursa (job #2817873) | Cod sursa (job #1818160) | Cod sursa (job #508334) | Cod sursa (job #2115602)
#include <fstream>
#include <string.h>
#include <stack>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char s[100005];
char expresie[100005][20];
int cont=0;
bool ok=0;
int main()
{
stack <char> semn;
fin>>s;
for(int i=0; i<strlen(s); i++)
{
if(isdigit(s[i]))
{
int c=0;
while(isdigit(s[i]))
{
expresie[cont][c]=s[i];
c++;
i++;
}
cont++;
i--;
}
else
{
if(s[i]=='*' || s[i]=='/')
{
if(semn.size()>0)
while(semn.top()=='*' || semn.top()=='/')
{
expresie[cont][0]=semn.top();
cont++;
semn.pop();
}
}
else if(s[i]=='+' || s[i]=='-')
{
if(ok==0)
while(semn.size()>0)
{
expresie[cont][0]=semn.top();
cont++;
semn.pop();
}
else
{
if(semn.size()>0)
while(semn.top()!='(')
{
expresie[cont][0]=semn.top();
cont++;
semn.pop();
}
}
}
else if(s[i]=='(')
ok=1;
else if(s[i]==')')
{
ok=0;
while(semn.top()!='(')
{
expresie[cont][0]=semn.top();
cont++;
semn.pop();
}
semn.pop();
}
semn.push(s[i]);
if(s[i]==')')
semn.pop();
}
}
while(semn.size()>0)
{
expresie[cont][0]=semn.top();
cont++;
semn.pop();
}
stack <int> rez;
for(int i=0; i<cont; i++)
{
if(isdigit(expresie[i][0]))
{
int nrr=0, p=0;
while(isdigit(expresie[i][p]))
{
nrr=nrr*10+(expresie[i][p]-'0');
p++;
}
rez.push(nrr);
}
else
{
int a=rez.top();
rez.pop();
int b=rez.top();
rez.pop();
if(expresie[i][0]=='+')
rez.push(a+b);
else if(expresie[i][0]=='-')
rez.push(b-a);
else if(expresie[i][0]=='*')
rez.push(a*b);
else if(expresie[i][0]=='/')
rez.push(b/a);
}
}
fout<<rez.top();
return 0;
}