Cod sursa(job #2453183)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 2 septembrie 2019 18:29:26
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>
#include <cstdio>
using namespace std;
#define Max 100010

char ex[Max],*p = ex;

long termen();

long factor();

long eval(){
	long r = termen();
	while(*p == '+' || *p == '-'){
		if(*p == '+'){
			++p;
			r += termen();

		}
		if(*p == '-'){
			++p;
			r -= termen();

		}
	}
	return r;

}

long termen(){
	long r = factor();
	while(*p == '*' || *p == '/'){
		if(*p == '*'){
			++p;
			r *= factor();

		}
		if(*p == '/'){
			++p;
			r /= factor();
					}

	}
	return r;
}

long factor(){
	long r = 0;
	if(*p == '('){
		++p;
		r = eval();
		++p;
	}else{
		while(*p >= '0' && *p <= '9'){
			r = r*10 + *p - '0';
			++p;

		}
	}
	return r;

}

int main(){

	fgets(ex, Max, fopen("evaluare.in", "r"));
    fprintf(fopen("evaluare.out", "w"), "%ld\n", eval());
    return 0;
}