View Code of Problem 94

#include<stdio.h>

int lisp(char *s);

int main()
{
	char s[1000];
	int ans;
	gets(s);
	ans = lisp(s);
	printf("%d", ans);
	return 0;
}

int lisp(char *s)
{
	int x, first;
	switch(s[1])
	{
		case '+':x = 0;
				for(int i = 3; s[i] != ')'; i++)
				{
					if(s[i] >= '0' && s[i] <= '9')
						x += s[i]-48;
					else if(s[i] == '(')
					{
						x += lisp(s+i);
						while(s[i] != ')')
							i++;
					}
				}
				break;
			
		case '-':first = 1;
				for(int i = 3; s[i] != ')'; i++)
				{
					if(s[i] >= '0' && s[i] <= '9')
						if(first)
						{
							x = s[i]-48;
							first = 0;
						}
						else
							x -= s[i]-48;
					else if(s[i] == '(')
					{
						if(first)
						{
							x = lisp(s+i);
							first = 0;
						}
						else
							x -= lisp(s+i);
						while(s[i] != ')')
							i++;
					}
				}
				break;
			
		case '*':x = 1;
				for(int i = 3; s[i] != ')'; i++)
				{
					if(s[i] >= '0' && s[i] <= '9')
						x *= s[i]-48;
					else if(s[i] == '(')
					{
						x *= lisp(s+i);
						while(s[i] != ')')
							i++;
					}
						
				}
				break;
			
		case '/':for(int i = 3; s[i] != ')'; i++)
				{
					if(s[i] >= '0' && s[i] <= '9')
						if(first)
						{
							x = s[i]-48;
							first = 0;
						}
						else
							x /= s[i]-48;
					else if(s[i] == '(')
					{
						if(first)
						{
							x = lisp(s+i);
							first = 0;
						}
						else
							x /= lisp(s+i);
						while(s[i] != ')')
							i++;
					}
				}
				break;
	}
	return x;
}

Double click to view unformatted code.


Back to problem 94