Cod sursa(job #2984004)

Utilizator alex_dacDumitrascu Constantin Alexandru alex_dac Data 23 februarie 2023 13:17:45
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include<bits/stdc++.h>

using namespace std;

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

char s[100005];
int i;

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



int main(){
    in>>s;
    i=0;
    out<<expresie();
}

int expresie(){
    int r=termen();

    while(s[i]=='+' or s[i]=='-'){
        if(s[i]=='+'){
            i++;
            r+=termen();
        }
        if(s[i]=='-'){
            i++;
            r-=termen();
        }
    }
    return r;
}

int termen(){

    int r=factor();

    while(s[i]=='*' or s[i]=='/'){
        if(s[i]=='*'){
            i++;
            r*=factor();
        }else{
            i++;
            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(isdigit(s[i])){
        r=10*r+(s[i]-'0');
        i++;
    }
    return r;
}