/* MUAHAHAHAHA PHEAR */ #include #include #include #include #define EM switch(pm) { case'*': m*=i; break; case'/': m/=i; break; case'%': m%=i; break; } i=0; #define EA switch(pa) { case'+': a+=m; break; case'-': a-=m; break; } m=1; pm='*'; int eval(char *w) { int i=0,a=0,m=1; char pa='+',pm='*'; for(;*w;w++) { if(*w>='0'&&*w<='9') i=i*10+(*w-'0'); else if(*w=='(') { char *u; int c=0; for(u=w;*u;u++) { if(*u=='(')c++; if(*u==')')c--; if(!c) { *u='\0'; i=eval(w+1); w=u; break; } } } else switch(*w) { case'+': case'-': EM EA pa=*w; break; case'*': case'/': case'%': EM; pm=*w; break; case' ': break; default: exit(-1); } } EM EA return a; } int main(int argc,char *argv[]) { if(!argv[1]) return -1; printf("%i\n",eval(argv[1])); return 0; }