Pagini recente » Cod sursa (job #1238615) | Cod sursa (job #134275) | Cod sursa (job #67668) | Cod sursa (job #996221) | Cod sursa (job #635461)
Cod sursa(job #635461)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char s[];
int val(int left,int right)
{
int t,i;
t=0;
for (i=left; i<=right; i++) t=t*10+s[i]-'0';
return t;
}
int eval(int left,int right,int r)
{
int i,p1,p2,k;
p1=p2=k=0;
for (i=left; i<=right; i++)
if (s[i]=='(') k++; else
if (s[i]==')') k--; else
if (k==0)
{
if (s[i]=='+') return eval(left,i-1,1)+eval(1+i,right,1)*r; else
if (s[i]=='-') return eval(left,i-1,1)-eval(1+i,right,-1)*r; else
if (s[i]=='*') p1=i; else
if (s[i]=='/') p2=i;
}
if (p1>p2) return eval(left,p1-1,1)*eval(1+p1,right,1); else
if (p2>0) return eval(left,p2-1,1)/eval(1+p2,right,1); else
if (s[left]=='(') eval(left+1,right-1,1); else
return val(left,right);
}
int main()
{
FILE *in,*out;
in=fopen("evaluare.in","r");
fgets(s,100000,in);
fclose(in);
out=fopen("evaluare.out","w");
printf(out,"%i",eval(0,strlen(s)-1,1));
fclose(out);
return 0;
}