Cod sursa(job #1784879)

Utilizator adu18sptAndrei Mircea adu18spt Data 20 octombrie 2016 16:53:07
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<fstream>
#include<cstring>

using namespace std;

ifstream fin("evaluare.in");
ofstream fout("evaluare.out");

int poz;
char sir[100010];


int get_num()
{
    int s=0;
    for(;'0'<=sir[poz] && sir[poz]<='9';poz++) s=s*10+sir[poz]-'0';
    return s;
}


int solve()
{
	int s=0,p=1;
	
	while(sir[poz]!=')')
	{
		if(sir[poz]=='(')
		{
			poz++;
			p*solve();
		}
		else if(sir[poz]=='*')
		{
			poz++;
		}
		else if(sir[poz]=='/')
		{
			poz++;
			if(sir[poz]=='(')
			{
				poz++;
				p/=solve();
			}
			else
			p/=get_num();
		}
		else if('0'<=sir[poz] && sir[poz]<='9')
		{
			p*=get_num();
		}
		else if(sir[poz]=='+')
		{
			s+=p;
			p=1;
			poz++;
		}
		else if(sir[poz]=='-')
		{
			s+=p;
			p=-1;
			poz++;
		}
		
		s+=p;
		poz++;
		
		return s;
		
	}
}


int main()
{
	fin>>sir;
	int n=strlen(sir);
	sir[n]=')';
	fout<<solve()-10;
	
	return 0;
}