Cod sursa(job #1759095)

Utilizator alex.vasiuVasiu Alexandru alex.vasiu Data 18 septembrie 2016 15:13:03
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <stdio.h>
#include <fstream>

using namespace std;

int	mult_div_mod(char *s, int *i);
int get_number(char *s, int *i);
int	plus_minus(char *s, int *i);

int	plus_minus(char *s, int *i)
{
	int r;

	r = mult_div_mod(s, i);
	while (s[*i] == '+' || s[*i] == '-')
	{
		*i = *i + 1;
		if (s[*i - 1] == '+')
			r += mult_div_mod(s, i);
		else
			r -= mult_div_mod(s, i);
	}
	return (r);
}

int	mult_div_mod(char *s, int *i)
{
	int r;

	r = get_number(s, i);
	while (s[*i] == '*' || s[*i] == '/' || s[*i] == '%')
	{
		*i = *i + 1;
		if (s[*i - 1] == '*')
			r *= get_number(s, i);
		else if (s[*i - 1] == '/')
			r /= get_number(s, i);
		else
			r %= get_number(s, i);
	}
	return (r);
}

int	get_number(char *s, int *i)
{
	int r;

	r = 0;
	if (s[*i] == '(')
	{
		*i = *i + 1;
		r = plus_minus(s, i);
		*i = *i + 1;
	}
	else
	{
		while (s[*i] != '\0' && s[*i] >= '0' && s[*i] <= '9')
		{
			r = r * 10 + (s[*i] - '0');
			*i = *i + 1;
		}
	}
	return (r);
}

int	eval_expr(char *str)
{
	int i;

	i = 0;
//	trim(str);
	//if (str == 0)
		//return (0);
	return (plus_minus(str, &i));
}

int main()
{
	ifstream f("evaluare.in");
	ofstream g("evaluare.out");
	char s[100005];
	f.get(s, 100004);
	f.close();
	g << eval_expr(s);
	g.close();
}