Cod sursa(job #1928475)

Utilizator FrequeAlex Iordachescu Freque Data 16 martie 2017 13:00:23
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

ifstream fin("evaluare.in");
ofstream fout("evaluare.out");

string str;
int poz, len;

int termen();
int factor();

int eval()
{
    int ans = termen();

    while (poz < len && (str[poz] == '+' || str[poz] == '-'))
    {
        if (str[poz] == '+')
        {
            ++poz;
            ans +=  termen();
        }
        else
        {
            ++poz;
            ans -= termen();
        }
    }
    return ans;
}

int termen()
{
    int ans = factor();

    while (poz < len && (str[poz] == '*' || str[poz] == '/'))
    {
        if (str[poz] == '*')
        {
            ++poz;
            ans *= factor();
        }
        else
        {
            ++poz;
            ans /= factor();
        }
    }
    return ans;
}

int factor()
{
    int ans = 0;

    if (poz < len && str[poz] == '(')
    {
        ++poz;
        ans = eval();
        ++poz;
    }
    else
    {
        while (poz < len && isdigit(str[poz]))
        {
            ans *= 10;
            ans += (str[poz] - '0');
            ++poz;
        }
    }
    return ans;
}

int main()
{
    fin >> str;
    len = str.size();
    fout << eval();
}