Cod sursa(job #2684843)

Utilizator SoulSnorterPetre Robert Cristian SoulSnorter Data 14 decembrie 2020 23:41:16
Problema Evaluarea unei expresii Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <cstdio>
#include <string>
#include <iostream>
#define NMax 100011

using namespace std;

char s[NMax];
char* p = s;

char peek()
{
    return* p;
}

char get()
{
    return *p++;
}

int termen()
{
    int result = get() - '0';
    while (peek() >= '0' && peek() <= '9')
    {
        result = result * 10 + (get() - '0');
    }
    return result;
}

int expression();

int factor()
{
    if (peek() >= '0' && peek() <= '9')
        return termen();
    else if (peek() == '(')
    {
        get();
        int result = expression();
        get();
        return result;
    }
    else if (peek() == '-')
    {
        get();
        return -factor();
    }
    return 0;
}

int term()
{
    int result = factor();
    while (peek() == '*' || peek() == '/')
    {
        if (get() == '*')
            result *= factor();
        else
            result /= factor();
    }
    return result;
}

int expression()
{
    int result = term();
    while (peek() == '+' || peek() == '-')
    {
        if (get() == '+')
            result += term();
        else
            result -= term();
    }
    return result;
}

int main()
{
    fgets(s, NMax, fopen("evaluare.in", " r"));
    long int result = expression();
    fprintf(fopen("evaluare.out", "w"), "%ld\n", result);
}