Pagini recente » Cod sursa (job #3285416) | Cod sursa (job #102535) | Cod sursa (job #392712) | Cod sursa (job #1593288) | Cod sursa (job #1885825)
#include <cstdio>
#include<cstring>
#include<cctype>
using namespace std;
char op[100005],s[100005];
int v[100005],top,top2;
int priority(char op)
{
int rez;
if(op=='+')
rez=1;
if(op=='-')
rez=1;
if(op=='*')
rez=2;
if(op=='/')
rez=2;
return rez;
}
int calc(int a,int top)
{
int rez;
if(op[top]=='+')
rez=v[a-1]+v[a];
if(op[top]=='-')
rez=v[a-1]-v[a];
if(op[top]=='*')
rez=v[a-1]*v[a];
if(op[top]=='/')
rez=v[a-1]/v[a];
return rez;
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
int n,i,nr;
gets(s);
n=strlen(s);
for(i=0; i<n; i++)
{
if(s[i]=='(')
op[++top]=s[i];
else
if(s[i]==')'){
while(op[top]!='('){
v[top2-1]=calc(top2,top);
top--;
top2--;
}
}
else
if(isdigit(s[i]))
{
nr=s[i]-'0';
i++;
while(isdigit(s[i]))
{
nr*=10;
nr+=(s[i]-'0');
i++;
}
i--;
v[++top2]=nr;
}
else
if(op[top]=='(' || priority(s[i])>priority(op[top]))
op[++top]=s[i];
else
if(priority(s[i])<=priority(op[top])){
while(priority(s[i])<=priority(s[i-1]) && op[top]!='(' && top>=0){
v[top2-1]=calc(top2,top);
top--;
top2--;
}
op[++top]=s[i];
}
}
while(top>=0)
{
v[top2-1]=calc(top2,top);
top--;
top2--;
}
printf("%d",v[top2]);
return 0;
}