Cod sursa(job #1510816)

Utilizator preda.andreiPreda Andrei preda.andrei Data 25 octombrie 2015 17:09:57
Problema Evaluarea unei expresii Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <stdio.h>
#include <cstring>

using namespace std;

char s[100001];
int ind=0;

int eval();
int eval2();
int eval3();

int eval(){
    int r=0, nr;

    if(s[ind]=='('){
        ++ind;
        r=eval3();
        if(ind<strlen(s) && s[ind]==')')
            ++ind;
    }

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

    return r+nr;
}

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

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

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

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

    return r;
}

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

    int rez=0;

    fgets(s, 100000, fin);
    if(s[strlen(s)-1]=='\n')
        s[strlen(s)-1]='\0';

    while(ind<strlen(s))
        rez=rez+eval3();

    fprintf(fout, "%d", rez);
    return 0;
}