Cod sursa(job #1893155)

Utilizator netfreeAndrei Muntean netfree Data 25 februarie 2017 15:07:10
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <bits/stdc++.h>
using namespace std;

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

int divide_by_plus(int &ind);
int get_factor(int &ind);
int get_termen(int &ind);
int get_number(int &ind);

string s;

int main()
{
    fin>>s;
    int ind = 0;
    fout<<divide_by_plus(ind);
    return 0;
}

int divide_by_plus(int &ind){
    int rez = get_termen(ind);

    while(s[ind] == '+' || s[ind] == '-'){
        ++ind;
        if(s[ind-1] == '+')
            rez += get_termen(ind);
        else
            rez -= get_termen(ind);
    }
    return rez;
}

int get_termen(int &ind){
     int rez = get_factor(ind);
        while(s[ind] == '*' || s[ind] == '/'){
            ++ind;
            if(s[ind-1] == '*')
                rez *= get_factor(ind);
            else
                rez /= get_factor(ind);
        }
        return rez;
}


int get_factor(int &ind){
    if(s[ind] != '(')
        return get_number(ind);
    else{
        ind ++;
        int nr = divide_by_plus(ind);
        ind ++;
        return nr;
    }
}

int get_number(int &ind){
    int rez = 0;
    while(isdigit(s[ind])){
        rez = rez * 10 + s[ind] - '0';
        ++ind;
    }
    return rez;
}