View Code of Problem 94

#include<stdio.h>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int lisp(string a, int i) {
	int sum = 0;
	int j;
	if (a[i] == '(') {
		sum=lisp(a, i + 1);
	}
	else if (a[i] == '+') {
		sum = a[i + 1] - '0';
		for (j = i + 2; a[j] != ')'; j++) {
			if (a[j] == '(') {
				sum+=lisp(a, j + 1);
				while (a[j] != ')') {
					j++;
				}
				continue;
			}
			sum += a[j] - '0';
		}

	}
	else if (a[i] == '-') {
		sum = a[i + 1] - '0';
		for (j = i + 2; a[j] != ')'; j++) {
			if (a[j] == '(') {
				sum -= lisp(a, j + 1);
				while (a[j] != ')') {
					j++;
				}
				continue;
			}
			sum -= a[j] - '0';
		}
	}
	else if (a[i] == '*') {
		sum = a[i + 1] - '0';
		for (j = i + 2; a[j] != ')'; j++) {
			if (a[j] == '(') {
				sum *= lisp(a, j + 1);
				while (a[j] != ')') {
					j++;
				}
				continue;
			}
			sum *= a[j] - '0';
		}
	}
	else {
		sum = a[i + 1] - '0';
		for (j = i + 2; a[j] != ')'; j++) {
			if (a[j] == '(') {
				sum /= lisp(a, j + 1);
				while (a[j] != ')') {
					j++;
				}
				continue;
			}
			sum /= a[j] - '0';
		}
	}
	return sum;
}
int main() {
	string a;
	getline(cin, a);
	while (1) {
		int k = a.find(" ");
		if (k != -1) {
			a.erase(k,1);
		}
		else {
			break;
		}
	}
	int sum = lisp(a, 0);
	printf("%d\n", sum);
}

Double click to view unformatted code.


Back to problem 94