Pagini recente » Cod sursa (job #1793717) | Cod sursa (job #1234891) | Cod sursa (job #1415928) | Cod sursa (job #1203825) | Cod sursa (job #1465301)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
#define vmax 100001
int stv[vmax],vfsv=-1,vfso=-1,pr[256];
char sto[vmax];
int main()
{
char s[vmax+2];
fstream f("evaluare.in",ios::in);
f.getline(s+1,vmax);
s[0]='(';strcat(s,")");
int i,o1,o2,rez;
for(i=0;i<256;i++)pr[i]=-1;
pr['(']=0;
pr['+']=pr['-']=1;
pr['*']=pr['/']=pr['*']=2;
char op,opi;
int n=strlen(s);
for(i=0;i<n;i++)
{
if(s[i]=='(')sto[++vfso]='(';
else
if(s[i]>='0'&&s[i]<='9')
if(s[i-1]<'0'||s[i-1]>'9')
stv[++vfsv]=s[i]-'0';
else
stv[vfsv]=stv[vfsv]*10+s[i]-'0';
else
{
if(s[i]==')')
{
while(sto[vfso]!='(')
{
o1=stv[vfsv-1],o2=stv[vfsv];
op=sto[vfso];
if(op=='/')rez=o1/o2;
else if(op=='*')rez=o1*o2;
else if(op=='%')rez=o1%o2;
else if(op=='-')rez=o1-o2;
else if(op=='+')rez=o1+o2;
vfsv--;stv[vfsv]=rez;
vfso--;
}
vfso--;
}
else
{
char opi=s[i];
while(pr[opi]<=pr[sto[vfso]])
{
o1=stv[vfsv-1],o2=stv[vfsv];
op=sto[vfso];
if(op=='/')rez=o1/o2;
else if(op=='*')rez=o1*o2;
else if(op=='%')rez=o1%o2;
else if(op=='-')rez=o1-o2;
else if(op=='+')rez=o1+o2;
vfsv--;stv[vfsv]=rez;
vfso--;
}
sto[++vfso]=opi;
}
}
}
f.close();
f.open("evaluare.out",ios::out);
f<<stv[0];
return 0;
}