Cod sursa(job #2869915)

Utilizator justin.stoicaJustin Stoica justin.stoica Data 11 martie 2022 22:10:51
Problema Evaluarea unei expresii Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.48 kb
#include <fstream>

using namespace std;
string s;
int last;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
int doOp(char ch, int num, int val){
    if(ch == '*') val *= num;
    if(ch == '+') val += num;
    if(ch == '/') val /= num;
    if(ch == '-') val -= num;
    return val;
}
int solve(int poz){
    char semn = '+';
    poz++;
    int val = 0;
    for(int i = poz; i < s.size(); i ++){
        if(s[i]>= '0' && s[i] <= '9'){
            int num = 0;
            while(s[i] >= '0' && s[i] <= '9'){
                num *= 10;
                num += s[i] - '0';
                i++;
            }
            i--;
            val = doOp(semn, num, val);
        }
        if(s[i] == '*'){
            semn = s[i];
        }
        if(s[i] == '/'){
            semn = s[i];
        }
        if(s[i] == '+'){
            semn = s[i];
            int num = solve(i);
            i = last;
            val = doOp(semn, num, val);
            if(s[i] == ')')
                i--;
        }
        if(s[i] == '-'){
            semn = s[i];
            int num = solve(i);
            i = last;
            val = doOp(semn, num, val);
            if(s[i] == ')')
                i--;
        }
        if(s[i] == '('){
            int num = solve(i);
            i = last;
            val = doOp(semn, num, val);
        }
        if(s[i] == ')'){
            last = i;
            return val;
        }
        last = i;
    }
    return val;
}
int main()
{
    cin >> s;
    char semn = '+';
    int val = 0;
    for(int i = 0; i < s.size(); i ++){
        if(s[i]>= '0' && s[i] <= '9'){
            int num = 0;
            while(s[i] >= '0' && s[i] <= '9'){
                num *= 10;
                num += s[i] - '0';
                i++;
            }
            i--;
            val = doOp(semn, num, val);
        }
        if(s[i] == '*'){
            semn = s[i];
        }
        if(s[i] == '/'){
            semn = s[i];
        }
        if(s[i] == '+'){
            semn = s[i];
            int num = solve(i);
            i = last;
            val = doOp(semn, num, val);
        }
        if(s[i] == '-'){
            semn = s[i];
            int num = solve(i);
            i = last;
            val = doOp(semn, num, val);
        }
        if(s[i] == '('){
            int num = solve(i);
            i = last;
            val = doOp(semn, num, val);
        }
    }
    cout << val;
    return 0;
}