Cod sursa(job #2082191)

Utilizator alittlezzCazaciuc Valentin alittlezz Data 5 decembrie 2017 20:07:46
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>

using namespace std;
#define ll long long

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

char s[100005];

int i = 1;

int add(int n);
int multiply(int n);
int getNumber(int n);

int add(int n){
    int ret = multiply(n);
    while(i <= n && (s[i] == '+' || s[i] == '-')){
        i++;
        if(s[i - 1] == '+'){
            ret += multiply(n);
        }else{
            ret -= multiply(n);
        }
    }
    return ret;
}

int multiply(int n){
    int ret = getNumber(n);
    while(i <= n && (s[i] == '*' || s[i] == '/')){
        i++;
        if(s[i - 1] == '*'){
            ret *= getNumber(n);
        }else{
            ret /= getNumber(n);
        }
    }
    return ret;
}

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

int main(){
    fin >> s + 1;
    int n = strlen(s + 1);
    fout << add(n);
    return 0;
}