Pagini recente » Cod sursa (job #983120) | Cod sursa (job #2836696) | Cod sursa (job #456961) | Cod sursa (job #722734) | Cod sursa (job #1042824)
#include <fstream>
#include<string.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100001], st2[100001];
int st1[100001],v1,v2,k,ok,nr,pr[256];
int calcul(int a,int b, char ch){
if(ch=='*')
return a*b;
if(ch=='+')
return a+b;
if(ch=='-')
return b-a;
if(ch=='/')
return b/a;
}
int main()
{
f>>s;
pr['(']=1;
pr['*']=pr['/']=3;
pr['+']=pr['-']=2;
v1=0;v2=0;nr=0;
int n=strlen(s);
for(int i=0;i<n;i++)
if(s[i]==')'){
if(ok==1){
v1++;st1[v1]=nr;
ok=0;
nr=0;
}
while(st2[v2]!='('){
k=calcul(st1[v1],st1[v1-1],st2[v2]);
v2--;
v1--;
st1[v1]=k;
}
v2--;
}
else
if(strchr("*+-/",s[i])){
if(ok==1){
v1++;st1[v1]=nr;
ok=0;
nr=0;
}
while(v2>0&&pr[s[i]]<=pr[st2[v2]]){
k=calcul(st1[v1],st1[v1-1],st2[v2]);
v2--;
v1--;
st1[v1]=k;
}
v2++;st2[v2]=s[i];
}
else
if(s[i]=='(')
{
v2++;
st2[v2]='(';
}
else{
nr=nr*10+s[i]-'0';
ok=1;
}
if(ok==1)
{
v1++;st1[v1]=nr;
}
while(v2>0){
k=calcul(st1[v1],st1[v1-1],st2[v2]);
v2--;
v1--;
st1[v1]=k;
}
g<<st1[v1];
return 0;
}