Cod sursa(job #1111903)

Utilizator lacraruraduRadu Matei Lacraru lacraruradu Data 19 februarie 2014 11:20:08
Problema Evaluarea unei expresii Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
/*
(1 + 1) * 13 + 10 / 2
      T1         T2
    F11  F12    F21 F22
    E
  T111  T112
  F1111 F1121
*/
#include <fstream>

using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");

int expresie();
int termen();
int factor();

char s[100000];
int p;

int expresie()
{
    int sum = termen();
    while (s[p] == '+' || s[p] == '-')
        if (s[p] == '+')
        {
            p++;
            sum += termen();
        }
        else
        {
            p++;
            sum -= termen();
        }
    return sum;
}

int termen()
{
    int prod = factor();
    while (s[p] == '*' || s[p] == '/')
        if(s[p] == '*')
        {
            p++;
            prod *= termen();
        }
        else
        {
            p++;
            prod /= termen();
        }
    return prod;
}

int factor()
{
    int semn = 1, val = 0;
    while (s[p] == '-')
    {
        p++;
        semn = -semn;
    }
    if (s[p] == '(')
    {
        p++;
        val = expresie();
        p++;
        return semn * val;
    }
    while (s[p] >= '0' && s[p] <= '9')
    {
        val = val * 10 + s[p] - '0';
        p++;
    }
    return semn * val;
}

int main()
{
    in.get(s,sizeof(s));
    p=0;
    int nr=expresie();
    out<<nr;
    return 0;
}