Cod sursa(job #3216043)

Utilizator rafael_xyzGardos Rafael rafael_xyz Data 15 martie 2024 16:35:13
Problema Evaluarea unei expresii Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <string>
#include <cstring>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");

int expresie();
int termen();
int factor();
int constanta();
int i=0;
string s;
int main() {
    cin>>s;
    cout<<expresie();
    return 0;
}
int expresie()
{
    int r=termen();
    while(s[i]=='+' || s[i]=='-')
    {
        if(s[i]=='+')
        {
            r+=termen();
            i++;
        }
        else
        {
            r-=termen();
            i++;
        }
    }
    return r;
}

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

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