Pagini recente » Cod sursa (job #1668602) | Cod sursa (job #1470511) | Cod sursa (job #1736081) | Cod sursa (job #2687159) | Cod sursa (job #228148)
Cod sursa(job #228148)
#include<stdio.h>
#include<string.h>
#define paranteza 2000000000
#define plus 1000001000
#define minus 1000001001
#define ori 1000002000
#define supra 1000002001
long m,i,st[100010],a[100010],l=1,n;
char s[100010];
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
gets(s);
m=strlen(s);
for(i=0;i<m;++i)
{if(s[i]>='0'&&s[i]<='9'){if(i)if(s[i-1]<'0'||s[i-1]>'9')++l;a[l]=a[l]*10+s[i]-'0';}
if(s[i]=='(')st[++n]=paranteza;
if(s[i]==')')
{while(st[n]!=paranteza)
{a[++l]=st[n];
--n;}
--n;}
if(s[i]=='+')
{while(st[n]/1000>=plus/1000&&st[n]!=paranteza&&n)
{a[++l]=st[n];
--n;}
st[++n]=plus;}
if(s[i]=='-')
{while(st[n]/1000>=minus/1000&&st[n]!=paranteza&&n)
{a[++l]=st[n];
--n;}
st[++n]=minus;}
if(s[i]=='*')
{while(st[n]/1000>=ori/1000&&st[n]!=paranteza&&n)
{a[++l]=st[n];
--n;}
st[++n]=ori;}
if(s[i]=='/')
{while(st[n]/1000>=supra/1000&&st[n]!=paranteza&&n)
{a[++l]=st[n];
--n;}
st[++n]=supra;}
}
while(n)a[++l]=st[n--];
for(i=1;i<=l;++i)
{
if(a[i]<=1000000)st[++n]=a[i];
if(a[i]==plus)st[n-1]=st[n-1]+st[n--];
if(a[i]==minus)st[n-1]=st[n-1]-st[n--];
if(a[i]==ori)st[n-1]=st[n-1]*st[n--];
if(a[i]==supra)st[n-1]=st[n-1]/st[n--];
}
printf("%ld\n",st[1]);
return 0;
}