Cod sursa(job #3209180)

Utilizator Andrei_IgnatAndrei Ignat Andrei_Ignat Data 2 martie 2024 10:07:52
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

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

const int N = 1e5;
char s[N+1];
int p = 0;

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 val * semn;
    }
    while (( '0' <= s[p] )&&( s[p] <= '9' )){
        val = 10 * val + ( s[p] - '0' );
        p++;
    }
    return val;
}

int main()
{   f.get( s , N + 1 );
    int x;
    x = expresie();
    g << x;
    return 0;
}