Cod sursa(job #1823648)

Utilizator alittlezzCazaciuc Valentin alittlezz Data 6 decembrie 2016 18:20:38
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
#include <fstream>
#include <string.h>

using namespace std;

char s[100005];

int add(const int&, int&);
int multiply(const int&, int&);
int getNumber(const int&, int&);

int main(){
    ifstream fin("evaluare.in");
    ofstream fout("evaluare.out");
    fin>>s + 1;
    int n = strlen(s + 1);
    int i = 1;
    fout<<add(n, i);
    return 0;
}

int add(const int& n, int& i){
    int ret = multiply(n, i);
    while(i <= n && (s[i] == '+' || s[i] == '-')){
        switch(s[i]){
            case '+':
                i++;
                ret += multiply(n, i);
                break;
            case '-':
                i++;
                ret -= multiply(n, i);
                break;
        }
    }
    return ret;
}

int multiply(const int& n, int& i){
    int ret = getNumber(n, i);
    while(i <= n && (s[i] == '*'|| s[i] == '/')){
        switch(s[i]){
            case '*':
                i++;
                ret *= getNumber(n, i);
                break;
            case '/':
                i++;
                ret /= getNumber(n, i);
                break;
        }
    }
    return ret;
}

int getNumber(const int& n, int& i){
    int ret = 0;
    if(s[i] == '('){
        i++;
        ret = add(n, i);
        i++;
    }else{
        while(i <= n && s[i] >= '0' && s[i] <= '9'){
            ret = ret * 10 + (s[i] - '0');
            i++;
        }
    }
    return ret;
}