Cod sursa(job #1464250)

Utilizator BogdanisarBurcea Bogdan Madalin Bogdanisar Data 22 iulie 2015 18:33:25
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.61 kb
#include<iostream>
#include<fstream>
#include<cmath>
#include<algorithm>
#include<vector>
#include<bitset>
#include<cstring>
#include<queue>

#define ull unsigned long long
#define ll long long
#define pb push_back
#define FOR(a,b,c) for (int a=b;a<=c; ++a)
#define ROF(a,b,c) for (int a=b;a>=c; --a)

using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int N; // vezi a treia metoda de rezolvare pentru explicatii
char sir[100010];
char* p=sir;

int eval();
int termen();
int factor();

int main()
{
    f>>sir;
    N=strlen(sir);
    g<<eval();
    f.close();g.close();
    return 0;
}

int eval() {
    int rez=termen();
    while (*p=='+' || *p=='-') {
        switch (*p) {
            case ('+'): {
                ++p;
                rez+=termen();
                break;
            }
            case ('-'): {
                ++p;
                rez-=termen();
                break;
            }
        }
    }
    return rez;
}

int termen() {
    int rez=factor();
    while (*p=='*' || *p=='/') {
        switch (*p) {
            case ('*'): {
                ++p;
                rez*=factor();
                break;
            }
            case ('/'): {
                ++p;
                rez/=factor();
                break;
            }
        }
    }
    return rez;
}

int factor() {
    int rez=0;
    if (*p=='(') {
        ++p;
        rez=eval();
        ++p;
    }
    else {
        while (*p>='0' && *p<='9') {
            rez=rez*10+*p-'0';
            ++p;
        }
    }
    return rez;
}