Pagini recente » Cod sursa (job #326259) | Cod sursa (job #1507547) | Cod sursa (job #1608905) | Cod sursa (job #3033506) | Cod sursa (job #326460)
Cod sursa(job #326460)
#include<stdio.h>
#include<string.h>
long n,np,no;
long e[1010];
char s[100010],polo[100010][12],op[100010];
void read()
{
scanf("%s",s);
n=strlen(s);
}
void poloneza()
{
long i,nr=-1;
no=-1;
char man[14];
for (i=0;i<n;i++)
{
if (s[i]>='0' && s[i]<='9')
{
man[++nr]=s[i];
}
else
{
if (nr>=0)
{
man[++nr]=NULL;
strcpy(polo[++np],man);
nr=-1;
}
if (s[i]=='(')
{
op[++no]=s[i];
}
else if (s[i]==')')
{
while (op[no]!='(')
{
man[0]=op[no];
man[1]=NULL;
strcpy(polo[++np],man);
no--;
}
no--;
}
else if (s[i]=='/' || s[i]=='*')
op[++no]=s[i];
else {
while (no>=0 && (op[no]=='/' || op[no]=='*'|| op[no]=='+'||op[no]=='-'))
{
man[0]=op[no];
man[1]=NULL;
strcpy(polo[++np],man);
no--;
}
op[++no]=s[i];
}
}
}
if (nr>=0)
{
man[++nr]=NULL;
strcpy(polo[++np],man);
}
while (no>=0)
{
man[0]=op[no];
man[1]=NULL;
strcpy(polo[++np],man);
no--;
}
}
void number(long &a,char s[])
{
a=0;
long i,n;
n=strlen(s);
for (i=0;i<n;i++)
{
a=a*10+s[i]-'0';
}
}
void eval()
{
long i,a,t=0;
for (i=1;i<=np;i++)
{
if (polo[i][0]>='0' && polo[i][0]<='9')
{
number(a,polo[i]);
e[++t]=a;
}
else switch (polo[i][0])
{
case '+':{e[t-1]=e[t]+e[t-1];t--;break;}
case '-':{e[t-1]=e[t-1]-e[t];t--;break;}
case '*':{e[t-1]=e[t-1]*e[t];t--;break;}
case '/':{e[t-1]=e[t-1]/e[t];t--;break;}
}
}
printf("%ld",e[t]);
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
read();
poloneza();
eval();
return 0;
}