Cod sursa(job #1510947)

Utilizator preda.andreiPreda Andrei preda.andrei Data 25 octombrie 2015 20:07:57
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <stdio.h>
#include <cstring>

using namespace std;

char s[100001];
int ind=0;
int len;

int eval3();

int eval(){
    int r;
    if(s[ind]=='('){
        ++ind;
        r=eval3();
        if(ind<len && s[ind]==')')
            ++ind;
        return r;
    }

    r=0;
    while(ind<len && s[ind]>='0' && s[ind]<='9'){
        r=r*10+(s[ind]-'0');
        ++ind;
    }

    return r;
}

int eval2(){
    int r=eval();

    while(s[ind]=='*' || s[ind]=='/'){
        ++ind;
        if(s[ind-1]=='*')
            r=r*eval();
        else r=r/eval();
    }
    return r;
}

int eval3(){
    int r=eval2();

    while(s[ind]=='+' || s[ind]=='-'){
        ++ind;
        if(s[ind-1]=='+')
            r=r+eval2();
        else r=r-eval2();
    }

    return r;
}

int main()
{
    FILE *fin=fopen("evaluare.in", "r");
    FILE *fout=fopen("evaluare.out", "w");

    //fscanf(fin, "%s", &s);
    fgets(s, 100000, fin);
    if(s[strlen(s)-1]=='\n')
        s[strlen(s)-1]='\0';
    len=strlen(s);
    fprintf(fout, "%d", eval3());

    return 0;
}