Cod sursa(job #1365807)

Utilizator romircea2010FMI Trifan Mircea Mihai romircea2010 Data 28 februarie 2015 15:46:22
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

const int NMax = 100010;
char s[NMax];
int poz;
int N;

int expr();
int termen();
int factor();

int expr()
{
    /// foloseste termen
    int t = termen();
    while (s[poz] == '+' || s[poz] == '-')
    {
        ++ poz;
        if (s[poz - 1] == '+')
            t += termen();
        else
            t -= termen();
    }
    return t;
}

int termen()
{
    /// foloseste factor
    int f = factor();
    while (s[poz] == '*' || s[poz] == '/')
    {
        ++ poz;
        if (s[poz - 1] == '*')
            f *= factor();
        else
            f /= factor();
    }
    return f;
}

int factor ()
{
    /// foloseste expr
    int x = 0;
    if (s[poz] == '(')
    {
        ++ poz;
        x = expr();
        ++ poz;
    }
    else
    {
        ///  cu siguranta avem un numar
        while ('0' <= s[poz] && s[poz] <= '9' && poz <= N)
        {
            x = x * 10 + s[poz] - '0';
            poz ++ ;
        }
    }
    return x;
}


int main()
{
    ifstream f("evaluare.in");
    f >> (s+1);
    N = strlen(s+1);
    f.close();

    poz = 1;

    ofstream g("evaluare.out");
    g << expr() << "\n";
    g.close();
    return 0;
}