Cod sursa(job #2619530)

Utilizator FilipCuciucFilip Cuciuc FilipCuciuc Data 27 mai 2020 21:29:26
Problema Evaluarea unei expresii Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.6 kb
//
//  main.cpp
//  C++ - teste
//
//  Created by Filip Cuciuc on 03/02/2020.
//  Copyright © 2020 Filip Cuciuc. All rights reserved.
//

//#include <iostream>
#include <stdio.h>
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
#include <math.h>
#include <map>
#include <string>
#include <cctype>
//#include "MED.h"
using namespace std;
//using namespace std::chrono;

ifstream cin("evaluare.in");
ofstream cout("evaluare.out");

int i;
string s;

int op1();
int op2();
int op3();

int op1() {
    int ans = op2();
    while(s[i] == '+' || s[i] == '-') {
        if(s[i] == '+') {
                i++;
                ans += op2();
        } if(s[i] == '-'){
                i++;
                ans -= op2();
        }
        
    }
    return ans;
}

int op2() {
    int ans = op3();
    while(s[i] == '/' || s[i] == '*') {
        if(s[i] == '/') {
                i++;
                ans /= op2();
        } if(s[i] == '*'){
                i++;
                ans *= op2();
        }
    }
return ans;
}

int op3() {
    int ans = 0;
    if(s[i] == '(') {
        i++;
        ans = op1();
        i++;
    } else {
        while(isdigit(s[i]) && i <
        s.size()) {
        ans *= 10;
        ans += s[i] - '0';
        i++;
        }
    }
    return ans;
}


int main() {
    cin >> s;
    cout << op1();
    return 0;
}

//    auto start = high_resolution_clock::now();
    
    
    
//    auto stop = high_resolution_clock::now();
//    auto duration = duration_cast<microseconds>(stop - start);
//    cout << "Time taken by function: "
//    << duration.count() << " microseconds" << endl;