Cod sursa(job #2703830)

Utilizator pielevladutPiele Vladut Stefan pielevladut Data 9 februarie 2021 12:39:07
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <bits/stdc++.h>

using namespace std;

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

char s[100100];
int i;
int expresie();
int termen();
int factor();

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

}

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

int factor()
{
    int numar = 0, semn = 1;
    if(s[i] == '(')
    {
        i++;
        numar = expresie();
        i++;
        return semn * numar;
    }
    else
    {
        while(isdigit(s[i]))
        {
            numar = numar * 10 + s[i] - '0';
            i++;
        }
        return semn * numar;
    }
}

int main()
{
    fin >> s;
    fout << expresie() << '\n';
    return 0;
}