Pagini recente » Cod sursa (job #2480015) | Cod sursa (job #2496108) | Cod sursa (job #58144) | Cod sursa (job #1828427) | Cod sursa (job #1921997)
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100005],st2[100005];
int i,n,st1[100005],pr[300],vf1,vf2,nr,k,ok;
int calcul (int a,int b,char c){
if(c=='+')
return a+b;
if(c=='-')
return a-b;
if(c=='*')
return a*b;
if(c=='/')
return a/b;
}
int main()
{
pr[')']=0;
pr['+']=1;
pr['-']=1;
pr['*']=2;
pr['/']=2;
f>>s+1;
n=strlen(s+1);
for(i=1;i<=n;i++){
if('0'<=s[i]&&s[i]<='9'){
nr=nr*10+s[i]-'0';
ok=1;}
else{
if(nr!=0){
st1[++vf1]=nr;
nr=0;
ok=0;}
if(s[i]=='(')
st2[++vf2]='(';
else{
if(s[i]==')'){
while(vf1>0&&st2[vf2]!='('){
k=calcul(st1[vf1-1],st1[vf1],st2[vf2]);
vf1--;
vf2--;
st1[vf1]=k;
}
vf2--;
}
else{
while(vf1>0&&pr[s[i]]<=pr[st2[vf2]]){
k=calcul(st1[vf1-1],st1[vf1],st2[vf2]);
vf1--;
vf2--;
st1[vf1]=k;
}
st2[++vf2]=s[i];
}}}}
if(ok==1)
st1[++vf1]=nr;
while(vf2>0){
k=calcul(st1[vf1-1],st1[vf1],st2[vf2]);
vf1--;
vf2--;
st1[vf1]=k;
}
g<<st1[1];
return 0;
}