Cod sursa(job #763021)

Utilizator ericptsStavarache Petru Eric ericpts Data 30 iunie 2012 20:12:44
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <cstdio>
#include <string>
#include <fstream>

using namespace std;
std::string c;
int it = 0;
long termen();
long factor();
long exeval()
{
    long r = termen();
    while(c[it] == '+' || c[it] == '-')
    {
        ++it;
        if(c[it-1] == '+')
        {
            r+=termen();
        }
        else if(c[it-1] == '-')
        {
            r-=termen();
        }
    }
    return r;
}
long termen()
{
    long r = factor();
    while(c[it] == '*' || c[it] == '/')
    {
        if(c[it] == '*')
        {
            ++it;
            r*=factor();
        }
        else if(c[it] == '/')
        {
            ++it;
            r/=factor();
        }
    }
    return r;
}
long factor()
{
    long r = 0;
    if(c[it] == '(')
    {
        ++it;
        r = exeval();
        ++it;
    }
    else
    {
        while(c[it] >= '0' && c[it] <= '9')
        {
            r = r*10 + c[it] - '0';
            ++it;
        }
    }
    return r;
}
int main()
{
    std::ifstream in("evaluare.in");
    in >> c;
    std::ofstream out("evaluare.out");
    out << exeval();
    return 0;
}