Cod sursa(job #1484294)

Utilizator jul123Iulia Duta jul123 Data 10 septembrie 2015 19:19:17
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include<bits/stdc++.h>

using namespace std;

string s;
int i = 0;

long long calc_expr();

long long calc_factor() {
    long long ans = 0;
    if(s[i] == '(') {
        ++i;
        ans = calc_expr();
        ++i;
    } else {
        while(s[i] >= '0' && s[i] <= '9') {
            ans = ans * 10 + (s[i] - '0');
            //cout << ans << " " <<"da\n";
            ++i;
        }
    }
    return ans;
}

long long calc_term() {
    long long f1 = calc_factor();
    long long ans = f1;
    while(s[i] == '*' || s[i] == '/') {
        if(s[i] == '*') {
            ++i;
            ans  *= calc_factor();
        }
        if(s[i] == '/') {
            ++i;
            ans /= calc_factor();
        }
    }
    return ans;
}

long long calc_expr() {
    long long t1 = calc_term();
    long long ans = t1;
    while(s[i] == '+' || s[i] == '-') {
        if(s[i] == '+') {
            ++i;
            ans += calc_term();
        }
        if(s[i] == '-') {
            ++i;
            ans -= calc_term();
        }
    }
    return ans;
}


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

    fin >> s;
    fout << calc_expr();
}