Cod sursa(job #2195059)
Utilizator | Data | 15 aprilie 2018 00:33:12 | |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.51 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char c,semn[100001],st[10001];
int i,n,k,nr,sw,numere[100001];
long long rez[101];
int main()
{
while(f>>c)
{
if(c>='0' && c<='9')
{
sw=1;
nr=nr*10+(c-48);
}
else
{
if(sw==1)
{
n++;
numere[n]=nr;
nr=0;
sw=0;
}
if(c=='(' || c=='+' || c=='-' || c=='*' || c=='/')
{
k++;
st[k]=c;
if(st[k]=='+' || st[k]=='-')
{
while(st[k-1]=='+' || st[k-1]=='-' || st[k-1]=='*' || st[k-1]=='/')
{
n++;
semn[n]=st[k-1];
st[k-1]=st[k];
k--;
}
}
if(st[k]=='*' || st[k]=='/')
{
while(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(sw==1)
{
n++;
numere[n]=nr;
sw=0;
nr=0;
}
while(k>0)
{
n++;
semn[n]=st[k];
k--;
}
k=0;
for(i=1;i<=n;i++)
{
if(semn[i]!='+' && semn[i]!='-' && semn[i]!='*' && semn[i]!='/')
{
k++;
rez[k]=numere[i];
}
else
{
if(semn[i]=='+')
{
rez[k-1]=rez[k-1]+rez[k];
}
if(semn[i]=='-')
{
rez[k-1]=rez[k-1]-rez[k];
}
if(semn[i]=='*')
{
rez[k-1]=rez[k-1]*rez[k];
}
if(semn[i]=='/')
{
rez[k-1]=rez[k-1]/rez[k];
}
k--;
}
}
g<<rez[1];
return 0;
}