Cod sursa(job #1973112)
Utilizator | Data | 24 aprilie 2017 14:57:09 | |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 90 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.4 kb |
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char c,semn[100000],st[10000];
int i,n,k,nr,gasitnr,fp[100000];
long long steval[100];
int main()
{
while(f>>c)
{
if(c>='0'&&c<='9')
{
gasitnr=1;
nr=nr*10+(c-48);
}
else
{
if(gasitnr)
{
n++;
fp[n]=nr;
nr=0;
gasitnr=0;
}
if(c=='('||c=='+'||c=='-'||c=='*'||c=='/')
{
k++;
st[k]=c;
if(st[k]=='+'||st[k]=='-')
{
if(st[k-1]=='+'||st[k-1]=='-'||st[k-1]=='*'||st[k-1]=='/')
{
n++;
semn[n]=st[k-1];
st[k-1]=st[k];
k--;
}
}
else
if(st[k]=='*'||st[k]=='/')
{
if(st[k-1]=='*'||st[k-1]=='/')
{
n++;
semn[n]=st[k-1];
st[k-1]=st[k];
k--;
}
}
}
else
if(c==')')
{
while(st[k]!='(')
{
n++;
semn[n]=st[k];
k--;
}
k--;
}
}
}
if(gasitnr)
{
n++;
fp[n]=nr;
nr=0;
gasitnr=0;
}
while(k)
{
n++;
semn[n]=st[k];
k--;
}
k=0;
for(i=1;i<=n;i++)
{
if(semn[i]=='+')
{
steval[k-1]=steval[k-1]+steval[k];
k--;
}
else
if(semn[i]=='-')
{
steval[k-1]=steval[k-1]-steval[k];
k--;
}
else
if(semn[i]=='*')
{
steval[k-1]=steval[k-1]*steval[k];
k--;
}
else
if(semn[i]=='/')
{
steval[k-1]=steval[k-1]/steval[k];
k--;
}
else
if(semn[i]!='0')
{
k++;
steval[k]=fp[i];
}
}
g<<steval[1];
return 0;
}