Pagini recente » Cod sursa (job #2530187) | Cod sursa (job #2917817) | Cod sursa (job #1995959) | Cod sursa (job #1829123) | Cod sursa (job #2250991)
#include<fstream>
#define N 100000
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char c,semn[N], st[N];
int i,n,k,nr,gasitnr,fp[N];
long long steval[100];
int main()
{
while(fin>>c)
{
if(c>='0'&&c<='9')
{
gasitnr=1;
nr=nr*10+(c-'0');
}
else
{
if(gasitnr)
{
fp[++n]=nr;
nr=0;
gasitnr=0;
}
if(c=='(' ||c=='+'||c=='-'||c=='*'||c=='/')
{
st[++k]=c;
if(st[k]=='+'||st[k]=='-')
{
while(st[k-1]=='+'||st[k-1]=='-'|| st[k-1]=='*'|| st[k-1]=='/')
{
semn[++n]=st[k-1];
st[k-1]=st[k];
k--;
}
}
else
if(st[k]=='*'||st[k]=='/')
{
while(st[k-1]=='*'||st[k-1]=='/')
{
semn[++n]=st[k-1];
st[k-1]=st[k];
k--;
}
}
}
else
if(c==')')
{
while(st[k]!='(')
{
semn[++n]=st[k];
k--;
}
k--;
}
}
}
if(gasitnr)
{
fp[++n]=nr;
nr=0;
gasitnr=0;
}
while(k)
{
semn[++n]=st[k];
k--;
}
k=0;
for(i=1;i<=n;++i)
{
if(semn[i]!='+'&&semn[i]!='-'&&semn[i]!='*'&&semn[i]!='/')
steval[++k]=fp[i];
else
{
switch(semn[i])
{
case '+':steval[k-1]=steval[k-1]+steval[k]; break;
case '-':steval[k-1]=steval[k-1]-steval[k]; break;
case '*':steval[k-1]=steval[k-1]*steval[k]; break;
case '/':steval[k-1]=steval[k-1]/steval[k]; break;
}
k--;
}
}
fout<<steval[1];
return 0;
}