Cod sursa(job #2931803)

Utilizator eugenio169M Eugenio eugenio169 Data 31 octombrie 2022 22:46:07
Problema Evaluarea unei expresii Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
/**

Aceasta este rezolvarea problemei Evaluarea unei expresii

https://www.infoarena.ro/problema/evaluare

Punctaj: 100

Grupa medie

**/


#include <iostream>

using namespace std;

char s[100001];
short int i;

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

int expresie()
{

    int r=termen();
    while (s[i]=='+' || s[i]=='-')
    {
        if (s[i] == '+')
        {
            i++;
            r=r+termen();
        }
        else
        {
            i++;
            r=r-termen();
        }
    }
    return r;
}
int termen()
{
    int r = factor();
    while (s[i]=='*' || s[i]=='/')
    {
        if (s[i]=='*')
        {
            i++;
            r=r*factor();
        }
        else
        {
            i++;
            r=r/factor();
        }
    }
    return r;
}
int factor()
{
    int r;
    if(s[i]=='(')
{
    i++;
    r=expresie();
    i++;
    }
    else
    {
        r=constanta();
    }
    return r;
}
int constanta()
{
    int r=0;
    while (s[i]>='0' && s[i]<='9')
    {
        r=r+s[i]-'0';
        i++;
    }
    return r;
}

int main ()
{
    cin>>s;
    i=0; //incepem numerotarea de la 0
    cout<<expresie();
}