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