Cod sursa(job #1318828)

Utilizator GrandmasterSoucup Bogdan Grandmaster Data 16 ianuarie 2015 13:38:15
Problema Evaluarea unei expresii Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.58 kb
#include <iostream>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <set>
#include <vector>
#include <map>
#include <queue>
#include <stack>
#include <utility>
#include <string>
#include <cstring>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <limits>
#include <sstream>
#include <deque>
#include <bitset>
#include <complex>
#include <functional>
#include <memory>
#include <numeric>
#define x first
#define y second
typedef std::pair<int, int> pii;
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char s[10005], *p = s;
int term();
int merm();
int berm();
int fact();
int merm()
{
	int r = berm();
	while(*p == '+' || *p == '-')
	{
		if(*p == '+')
		{
			p++;
			r += berm();
		}
		if(*p == '-')
		{
			p++;
			r -= berm();
		}
	}
	return r;
}
int berm()
{
	int r = fact();
	while(*p == '*' || *p == '/')
	{
		if(*p == '*')
		{
			p++;
			r *= fact();
		}
		if(*p == '/')
		{
			p++;
			r /= fact();
		}
	}
	return r;
}
int fact()
{
	int r = term();
	while(*p == '^' || *p == '[')
	{
		if(*p == '^')
		{
			p++;
			r = pow(r, term());
		}
		if(*p == '[')
		{
			p++;
			r *= sqrt(term());
		}
	}
	return r;
}
int term()
{
	int r = 0;
	if(*p =='(')
	{
		p++;
		r = merm();
		p++;
	}
	else
	while(*p >= '0' && *p <= '9')
	{
		int x = int(*p) - 48;
		r = r * 10 + x;
		p++;
	}
	return r;
}
int main () {
/*#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
#endif*/
	fin.get(s, 100);
	fout << merm();
	return 0;
}