Pagini recente » Cod sursa (job #447978) | Cod sursa (job #455039) | Cod sursa (job #749459) | Cod sursa (job #435375) | Cod sursa (job #872698)
Cod sursa(job #872698)
#include <fstream>
#include<string.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int gr(char t)
{
if(t=='-'||t=='+')
return 1;
else
if(t=='/'||t=='*')
return 2;
else
return 0;
}
int n,t,i,nr,v[100100],k,sk,ts,stiva[100100];
char s[100100],op[100100],s1[100100];
int main ()
{
f>>s;
n=strlen(s);
s1[1]='(';
s[n]=')';
for(i=0;i<=n;++i)
{
if(s[i]=='(')
s1[++sk]='(';
else
if(s[i]>='0'&&s[i]<='9')
{
nr=0;
while(s[i]>='0'&&s[i]<='9')
{
nr=nr*10+s[i]-48;
i++;
}
--i;
v[++t]=nr;
}
else
if(s[i]==')')
{
for(k=sk;k>=0&&s1[k]!='(';--k)
{
op[++t]=s1[k];
}
sk=k-1;
}
else
{
if(gr(s[i])<=gr(s1[sk]))
{
op[++t]=s1[sk];
s1[sk]=s[i];
}
else
s1[++sk]=s[i];
}
}
for(i=1;i<=t;++i)
{
if(v[i])
{
stiva[++ts]=v[i];
}
else
{
switch(op[i])
{
case '+': stiva[ts-1]=stiva[ts]+stiva[--ts]; break;
case '-': stiva[ts-1]=stiva[--ts]-stiva[ts+1]; break;
case '/': stiva[ts-1]=stiva[--ts]/stiva[ts+1]; break;
case '*': stiva[ts-1]=stiva[ts]*stiva[--ts]; break;
}
}
}
g<<stiva[1];
}