Pagini recente » Cod sursa (job #3274770) | Cod sursa (job #1806776) | Cod sursa (job #2008901) | Cod sursa (job #168135) | Cod sursa (job #911005)
Cod sursa(job #911005)
#include<stdio.h>
#include<string.h>
char v[100010];
int l;
int eval(int &i);
int numar(int &i)
{
int nr=0;
if(v[i]=='(')
{
return eval(++i);
}
while(v[i]>='0'&&v[i]<='9')
{
nr=nr*10+v[i]-'0';
i++;
}
return nr;
}
int eval(int &i)
{
int a,b,c;
char o1,o2;
a=0;
b=0;
o1=o2='+';
c=numar(i);
while(i<l)
{
//printf("%.6lf %c %.6lf %c %.6lf\n",a,o1,b,o2,c);
if(o2=='+'||o2=='-')
{
if(o1=='+')
a=a+b;
else
a=a-b;
b=c;
o1=o2;
}
else
{
if(o2=='*')
b=b*c;
else
b=b/c;
}
if(v[i]==')')
{
o2='+';
c=0;
i++;
break;
}
o2=v[i];
c=numar(++i);
}
///////////////
//printf("%.6lf %c %.6lf %c %.6lf\n",a,o1,b,o2,c);
if(o2=='+'||o2=='-')
{
if(o1=='+')
a=a+b;
else
a=a-b;
b=c;
o1=o2;
}
else
{
if(o2=='*')
b=b*c;
else
b=b/c;
}
if(o1=='+')
a=a+b;
else
a=a-b;
//printf("%.5lf\n",a);
return a;
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
int i=0;
int a;
scanf("%s",&v);
l=strlen(v);
a=eval(i);
printf("%d\n",a);
return 0;
}