Cod sursa(job #3199264)

Utilizator Sasha_12454Sasha Costea Sasha_12454 Data 1 februarie 2024 10:27:28
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in ("evaluare.in");
ofstream out ("evaluare.out");
int expresie(string & s,int & cnt);
int termen(string &s, int &cnt);
int factor(string& s,int& cnt);
int numar(string &s, int &cnt);

int expresie(string & s,int & cnt)
{
    int semn;
    int res=termen(s,cnt);
    while(cnt<(int)s.size() && (s[cnt]=='+' || s[cnt]=='-'))
    {
        if(s[cnt]=='-')
            semn=-1;
        else
            semn=1;
        cnt++;
        res+=semn*termen(s,cnt);
    }
    return res;
}

int termen(string & s, int & cnt)
{
    int res=factor(s,cnt);
    while(cnt<(int)s.size() && (s[cnt]=='*' || s[cnt]=='/'))
    {
        cnt++;
        if(s[cnt-1]=='*')
        {
            res*=factor(s,cnt);
        }
        else
        {
            res/=factor(s,cnt);
        }
    }
    return res;
}

int factor(string & s,int & cnt)
{
    int res;
    if(s[cnt]=='(')
    {
        cnt++;
        res=expresie(s,cnt);
        cnt++;
        return res;
    }
    else
        return numar(s,cnt);
}

int numar(string & s, int & cnt)
{
    int res=0;
    while(s[cnt]>='0' && s[cnt]<='9')
    {
        res*=10;
        res+=s[cnt]-'0';
        cnt++;
    }
    return res;
}

//5+7+(3+4)*7

int main()
{
    int cnt=0;
    string s;
    in>>s;
    out<<expresie(s,cnt);
    return 0;
}