Cod sursa(job #2365542)

Utilizator popabogdanPopa Bogdan Ioan popabogdan Data 4 martie 2019 14:37:33
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>

#define Nmax 100005

using namespace std;

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

char C[Nmax];
int idx = 0;

int expresie();

int factor()
{
    if(C[idx] == '(')
        return expresie();
    int ret = 0;
    while(C[idx] >= '0' && C[idx] <= '9')
        ret = ret * 10 + C[idx++] - '0';
    return ret;
}

int termen()
{
    int ret = factor();
    while(C[idx] == '*' || C[idx] == '/')
    {
        if(C[idx] == '*')
        {
            idx++;
            ret *= factor();
        }
        else
        {
            idx++;
            ret /= factor();
        }
    }
    return ret;
}

int expresie()
{
    idx++;
    int ret = termen();
    while(C[idx] != ')')
    {
        if(C[idx] == '+')
        {
            idx++;
            ret += termen();
        }
        else
        {
            idx++;
            ret -= termen();
        }
    }
    idx++;
    return ret;
}

int main()
{
    fin >> (C + 1);
    C[0] = '(';
    C[strlen(C)] = ')';
    fout << expresie() << "\n";
    return 0;
}