Cod sursa(job #3244054)

Utilizator cosmin_mihaiDumitru Cosmin cosmin_mihai Data 23 septembrie 2024 10:37:43
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
//
// Created by Cosmin Dumitru on 23.09.2024.
//
#include <fstream>
using namespace std;

const int N=1e5;

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

char s[N+1];
int p;


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

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

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

int factor(){
    int val=0,semn=1;
    while(s[p]=='-'){
        semn=(-semn);
        p++;
    }
    if (s[p]=='(') {
        p++;
        val = expresie();
        p++;
        return semn*val;
    }
    //calculam constanta (yay...)
    while ('0'<=s[p] &&s[p]<='9'){
        val = val*10+(s[p]-'0');
        p++;
    }
    return semn*val;
}


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