Pagini recente » Cod sursa (job #3194820) | Cod sursa (job #1538712) | Cod sursa (job #414075) | Cod sursa (job #1404732) | Cod sursa (job #1871728)
#include<cstdio>
#include<cstring>
int polo[100000];
char op[100000];
char s[100000];
int priority(char a)
{
if(a=='*'||a=='/')
return 2;
if(a=='-'||a=='+')
return 1;
return -1;
}
int main()
{
int i,j,n,poz,cpoz,p,nr,ccpoz;
char c;
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
i=0;
j=0;
gets(s+1);
n=strlen(s+1);
poz=1;
while(poz<=n)
{
nr=0;
if(s[poz]-'0'>=0&&s[poz]-'0'<=9)
{
cpoz=poz;
p=1;
while(s[cpoz]-'0'>=0&&s[cpoz]-'0'<=9)
{
cpoz++;
p*=10;
}
p/=10;
ccpoz=cpoz-1;
cpoz=poz;
poz=ccpoz;
while(p>=1)
{
nr=nr+(s[cpoz]-'0')*p;
p/=10;
cpoz++;
}
j++;
polo[j]=nr;
}
else
{
if(i==0||op[i]=='('||priority(s[poz])>priority(op[i])||s[poz]=='(')
{
i++;
op[i]=s[poz];
}
else
{
if(s[poz]==')')
{
while(op[i]!='(')
{
j++;
polo[j]=op[i];
i--;
}
i--;
}
else if(priority(s[poz])<=priority(op[i]))
{
while(op[i]!='('&&i>=1)
{
j++;
polo[j]=op[i];
i--;
}
i++;
op[i]=s[poz];
}
if(polo[j]=='-')
polo[j-2]=polo[j-2]-polo[j-1];
if(polo[j]=='+')
polo[j-2]=polo[j-2]+polo[j-1];
if(polo[j]=='*')
polo[j-2]=polo[j-2]*polo[j-1];
if(polo[j]=='/')
polo[j-2]=polo[j-2]/polo[j-1];
j-=2;
}
}
poz++;
}
while(j>1){
if(i>0)
{
j++;
polo[j]=op[i];
i--;
}
if(polo[j]=='-')
polo[j-2]=polo[j-2]-polo[j-1];
if(polo[j]=='+')
polo[j-2]=polo[j-2]+polo[j-1];
if(polo[j]=='*')
polo[j-2]=polo[j-2]*polo[j-1];
if(polo[j]=='/')
polo[j-2]=polo[j-2]/polo[j-1];
j-=2;
}
printf("%d",polo[1]);
}