Pagini recente » Cod sursa (job #2682282) | Cod sursa (job #2083388) | Cod sursa (job #2979520) | Cod sursa (job #41003) | Cod sursa (job #1050953)
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100001],a[100001];
int b[100001],vf1,vf2,nr,ok,i,pr[256],n;
void calcul(){
char ch;
int rez;
ch=a[vf1];
switch(ch){
case'+':rez=b[vf2-1]+b[vf2];break;
case'-':rez=b[vf2-1]-b[vf2];break;
case'*':rez=b[vf2-1]*b[vf2];break;
case'/':rez=b[vf2-1]/b[vf2];break;
}
vf2--;
vf1--;
b[vf2]=rez;
}
int main()
{
f>>s;
pr['(']=1;
pr['+']=pr['-']=2;
pr['*']=pr['/']=3;
nr=0;
ok=0;
n=strlen(s);
for(i=0;i<n;i++){
if(s[i]=='('){
vf1++;
a[vf1]=s[i];
}
else
if(s[i]==')'){
if(ok==1){
vf2++;
b[vf2]=nr;
nr=ok=0;
}
while(a[vf1]!='('){
calcul();
}
vf1--;
}
else
if(s[i]>='0'&&s[i]<='9'){
ok=1;
nr=nr*10+s[i]-'0';
}
else{
if(ok==1){
vf2++;
b[vf2]=nr;
nr=ok=0;
}
while(vf1>0&&pr[s[i]]<=pr[a[vf1]])
calcul();
vf1++;
a[vf1]=s[i];
}
}
if(ok==1){
vf2++;
b[vf2]=nr;
}
while(vf1>0)
calcul();
g<<b[1];
return 0;
}