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;
	int num, flag;
	switch(s[1])
	{
		case '+':x = 0;
				for(int i = 3; s[i] != ')'; i++)
				{
					if(s[i] >= '0' && s[i] <= '9')
					{
						x += s[i]-48;
						if(s[i+1] >= '0' && s[i+1] <= '9')
							x *= 10;
					}
					else if(s[i] == '(')
					{
						x += lisp(s+i);
						while(s[i] != ')')
							i++;
					}
				}
				break;
			
		case '-':x = 0; 
				first = 1;
				for(int i = 3; s[i] != ')'; i++)
				{
					if(s[i] >= '0' && s[i] <= '9')
					{
						x -= s[i]-48;
						if(s[i+1] >= '0' && s[i+1] <= '9')
							x *= 10;
						else if(s[i+1] == ' ' && first)
						{
							first = 0;
							x = -x;
						}
					}
					else if(s[i] == '(')
					{
						if(first)
						{
							x = lisp(s+i);
							first = 0;
						}
						else
							x -= lisp(s+i);
						while(s[i] != ')')
							i++;
					}
				}
				break;
			
		case '*':num = 0;
				x = 1;
				flag = 0;
				for(int i = 3; s[i] != ')'; i++)
				{
					if(s[i] >= '0' && s[i] <= '9')
					{
						num = num * 10 + s[i] - 48;
						if(s[i+1] == ' ' || s[i+1] == ')')
							flag = 1;
						if(flag)
						{
							x *= num;
							num = 0;
							flag = 0;
						}
					}
					else if(s[i] == '(')
					{
						x *= lisp(s+i);
						while(s[i] != ')')
							i++;
					}
				}
				break;
			
		case '/':first = 1;
				num = 0;
				flag = 0;
				for(int i = 3; s[i] != ')'; i++)
				{
					if(s[i] >= '0' && s[i] <= '9')
					{
						num = num * 10 + s[i] - 48;
						if(s[i+1] == ' ' || s[i+1] == ')')
							flag = 1;
						if(flag)
						{
							if(first)
							{
								x = num;
								first = 0;
							}
							else
								x /= num;
							num = 0;
							flag = 0;
						}
					}
					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