Cod sursa(job #2329512)

Utilizator patcasrarespatcas rares danut patcasrares Data 26 ianuarie 2019 20:54:32
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include<fstream>
#include<cstdio>
#include<cctype>
#include<vector>
#include<cstring>
#include<algorithm>
#define pb push_back
#define x first
#define y second
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
const int DN=1e5+5;
int poz,n;
char a[DN];
int eval();
int termen();
int factor();
int eval()
{
	int f,g,rez=0;
	if(poz>n)
		return 0;
	f=termen();
	rez=f;
	while(1)
	{
		if(poz>n)
			break;
		if(a[poz]=='+')
		{
			poz++;
			rez+=termen();
		}
		else
			if(a[poz]=='-')
			{
				poz++;
				rez-=termen();
			}
			else
				break;
	}
	return rez;
}
int termen()
{
	int f,g,rez=0;
	if(poz>n)
		return 0;
	f=factor();
	rez=f;
	while(1)
	{
		if(poz>n)
			break;
		if(a[poz]=='*')
		{
			poz++;
			rez*=factor();
		}
		else
			if(a[poz]=='/')
			{
				poz++;
				rez/=factor();
			}
			else
				break;
	}
	return rez;
}
int factor()
{
	int rez=0;
	if(poz>n)
		return 0;
	if(a[poz]=='(')
	{
		poz++;
		rez=eval();
		poz++;
		return rez;
	}
	while(isdigit(a[poz]))
	{
		rez=rez*10+a[poz]-'0';
		poz++;
	}
	return rez;
}
int main()
{
	fin.getline(a+1,DN);
	poz=1;
	n=strlen(a+1);
	fout<<eval();
}