Cod sursa(job #1928440)

Utilizator waren4Marius Radu waren4 Data 16 martie 2017 11:51:32
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.25 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("evaluare.in"); ofstream g("evaluare.out");
int nr,p,t[50101],sm[50101]; string s;

int paranteza(int primul)
{
    t[nr] = 0;
    while(s[p] != ')') {
        if (s[p] >= '0' && s[p] <= '9') {
            while(s[p] >= '0' && s[p] <= '9') {
                t[nr] = t[nr] * 10 + (s[p] - '0');
                ++p;
            }
        }
        if (s[p] == '+') {
            ++nr;
            sm[nr] = 1;
            ++p;
            t[nr] = 0;
        }
        if (s[p] == '-') {
            ++nr;
            sm[nr] = 2;
            ++p;
            t[nr] = 0;
        }
        if (s[p] == '*') {
            ++nr;
            sm[nr] = 3;
            ++p;
            t[nr] = 0;
        }
        if (s[p] == '/') {
            ++nr;
            sm[nr] = 4;
            ++p;
            t[nr] = 0;
        }
        if (s[p] == '(') {
                ++p;
                t[nr] = paranteza(nr);
            }
    }
    int i,j;
    i = nr;
    j = primul;
    while(j < i) {
        while((sm[j+1] == 3 || sm[j+1] == 4) && j < i) {
            if (sm[j+1] == 3) {
                t[j] = t[j] * t[j+1];
                for(int l = j+1; l < i; ++l) {
                    t[l] = t[l+1];
                    sm[l] = sm[l+1];
                }
                --i;
            }
            else {
                t[j] = t[j] / t[j+1];
                for(int l =j+1; l< i; ++l) {
                    t[l] = t[l+1];
                    sm[l] = sm[l+1];
                }
                --i;
            }
        }
        ++j;
    }
    j = primul;
    while(j < i) {
        if (sm[j+1] == 1) {
            t[j] = t[j] + t[j+1];
            for(int l = j+1; l < i; ++l) {
                t[l] = t[l+1];
                sm[l] = sm[l+1];
            }
            --i;
        }
        else {
            t[j] = t[j] - t[j+1];
            for(int l = j+1; l < i; ++l) {
                t[l] = t[l+1];
                sm[l] = sm[l+1];
            }
            --i;
        }
    }
    nr = i;
    ++p;
    return t[primul];
}
int main() {
    f>>s;
    s += ')';
    p = 0;
    nr = 1;
    g<<paranteza(nr);
    return 0;
}