Pagini recente » Cod sursa (job #1235036) | Cod sursa (job #2653887) | Cod sursa (job #492657) | Cod sursa (job #3239782) | Cod sursa (job #869358)
Cod sursa(job #869358)
#include<stdio.h>
#include<string.h>
FILE *in,*out;
const int oo=(1<<30)-1;
int calcul(int left,int right);
char expresie[100001];
int main(void)
{
in=fopen("evaluare.in","rt");
out=fopen("evaluare.out","wt");
fscanf(in,"%s",expresie);
fprintf(out,"%d",calcul(0,strlen(expresie)-1));
fclose(in);
fclose(out);
return 0;
}
int calcul (int left,int right)
{
int paranteze=0;
int gradmin=oo,grad;
int pos;
for(int i=left;i<=right;++i)
{
if(expresie[i]=='(')
paranteze++;
else
if(expresie[i]==')')
paranteze--;
else
if(expresie[i]=='+' || expresie[i]=='-')
{
grad=paranteze*2;
if(grad<=gradmin)
{
gradmin=grad;
pos=i;
}
}
else if(expresie[i]=='*' || expresie[i]=='/')
{
grad=paranteze*2+1;
if(grad<=gradmin)
{
gradmin=grad;
pos=i;
}
}
}
if(gradmin!=oo)
{
left=calcul(left,pos-1);
right=calcul(pos+1,right);
if(expresie[pos]=='+')
return left+right;
else
if(expresie[pos]=='-')
return left-right;
else
if(expresie[pos]=='*')
return left*right;
else
return left/right;
}
int num=0;
for(int i=left;i<=right;++i)
if(expresie[i]!='(' && expresie[i]!=')')
num=num*10 + (expresie[i]-48);
return num;
}