View Code of Problem 94

#include<iostream>
#include<string>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <cmath>
#include<cstring>
using namespace std;
int lisp(string s, int pos)
{
	int j;
	int sum = 0;
	if (s[pos] == '(')
	{
		sum = lisp(s, pos + 1);
	}
	else if (s[pos] == '+')
	{
		sum = (s[pos + 1] - '0');
		for (int j = pos + 2;s[j] != ')';j++)
		{
			if (s[j] == '(')
			{
				sum += lisp(s, j + 1);
				while (s[j] != ')')
				{
					j++;
				}
				
			}
			else
				sum += (s[j] - '0');
		}
	}
	else if (s[pos] == '-')
	{
		sum = (s[pos + 1] - '0');
		for (int j = pos + 2;s[j] != ')';j++)
		{
			if (s[j] == '(')
			{
				sum -= lisp(s, j + 1);
				while (s[j] != ')')
				{
					j++;
				}

			}
			else
				sum -= (s[j] - '0');
		}
	}
	else if (s[pos] == '*')
	{
		sum = (s[pos + 1] - '0');
		for (int j = pos + 2;s[j] != ')';j++)
		{
			if (s[j] == '(')
			{
				sum *= lisp(s, j + 1);
				while (s[j] != ')')
				{
					j++;
				}

			}
			else
				sum *= (s[j] - '0');
		}
	}
	else if (s[pos] == '/')
	{
		sum = (s[pos + 1] - '0');
		for (int j = pos + 2;s[j] != ')';j++)
		{
			if (s[j] == '(')
			{
				sum /= lisp(s, j + 1);
				while (s[j] != ')')
				{
					j++;
				}

			}
			else
				sum /= (s[j] - '0');
		}
	}
	return sum;
}
int main()
{
	string s;
	getline(cin, s);
	for (int i = 0;i < s.size();i++)
	{
		if (s[i] == ' ')
			s.erase(i, 1);
	}
	int sum;
	sum = lisp(s, 0);
	cout << sum;
}

Double click to view unformatted code.


Back to problem 94