Cod sursa(job #1892316)

Utilizator robertkarolRobert Szarvas robertkarol Data 24 februarie 2017 21:21:19
Problema Evaluarea unei expresii Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>
#define lmax 100001
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char sir[lmax], *s;
long expresie(char* &sir);
long termen(char* &sir);
long factor(char* &sir);
long numar(char* &sir);
long expresie(char* &sir)
{
	long raspuns=termen(sir);
	while(sir[0]=='+')
    {
		sir++;
		raspuns+=termen(sir);
	}
	while(sir[0]=='-')
    {
		sir++;
		raspuns-=termen(sir);
	}
	return raspuns;
}
long termen(char* &sir)
{
	long raspuns=factor(sir);
	while(sir[0]=='*')
    {
		sir++;
		raspuns*=factor(sir);
	}
	while(sir[0]=='/')
	{
		sir++;
		raspuns/=factor(sir);
	}
	return raspuns;
}
long factor(char* &sir)
{
	long raspuns=0;
	if(sir[0]=='(')
    {
		sir++; // '('
		raspuns=expresie(sir);
		sir++; // ')'
	}
	else if(sir[0]>='0'&&sir[0]<='9') raspuns=numar(sir);
	return raspuns;
}
long numar(char* &sir)
{
    long raspuns=0;
    while(sir[0]>='0'&&sir[0]<='9')
    {
        raspuns=raspuns*10+(sir[0]-'0');
        sir++;
    }
	return raspuns;
}
int main()
{
	fin>>sir;
    s=sir;
    fout<<expresie(s);
	return 0;
}