Cod sursa(job #2652771)

Utilizator tryharderulbrebenel mihnea stefan tryharderul Data 25 septembrie 2020 17:45:25
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <stdio.h>
#include <string.h>

#define NMAX 100003

using namespace std;

int k,n;

int eval();
int termen();
int factor();
int ok();

char v[NMAX];

int eval(){
    int s=termen();

    while((v[k]=='+' || v[k]=='-') && k<n){
        if(v[k]=='+'){
            k++;
            s=s+termen();
        }else{
            k++;
            s=s-termen();
        }


    }

    return s;
}

int termen(){
    int s=factor();

    while((v[k]=='*' || v[k]=='/') && k<n){
        if(v[k]=='*'){
            k++;
            s=s*factor();
        }else{
            k++;
            s=s/factor();
        }


    }

    return s;


}

int ok(){

   return (v[k]>='0' && v[k]<='9');

}

int factor(){
    int s=0;

    if(v[k]=='('){
        k++;
        s=eval();
        k++;
    }else{
        while(ok() && k<=n){
            s=s*10+(v[k]-'0');
            k++;
        }
    }


    return s;
}


int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);

    scanf("%s",&v);


    n=strlen(v);

    printf("%d",eval());

    return 0;
}