Cod sursa(job #1968586)

Utilizator caprariuapCaprariu Alin-Paul caprariuap Data 17 aprilie 2017 19:20:35
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <stack>
#include <iomanip>
#include <queue>

using namespace std;

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

#define nmax 100010
char a[nmax];
int poz;

int getNumber()
{
    int ret=0;
    while (a[poz]>='0'&&a[poz]<='9')
        ret=ret*10+a[poz]-'0',poz++;
    return ret;
}

int adunare();
int inmultire();
int termen();

int main()
{
    fin >> a;
    poz=0;
    fout << adunare();
}

int adunare()
{
    int t1,t2;
    t1=inmultire();
    while (a[poz]=='+'||a[poz]=='-')
    {
        bool scad=(a[poz++]=='+' ? 0 : 1);
        t2=inmultire();
        if (scad)
            t1-=t2;
        else
            t1+=t2;
    }
    return t1;
}

int inmultire()
{
    int t1,t2;
    t1=termen();
    while (a[poz]=='*'||a[poz]=='/')
    {
        bool impart=(a[poz++]=='*' ? 0 : 1);
        t2=termen();
        if (impart)
            t1/=t2;
        else
            t1*=t2;
    }
    return t1;
}

int termen()
{
    int t;
    if (a[poz]=='(')
    {
        poz++;
        t=adunare();
        poz++;
    }
    else
        t=getNumber();
    return t;
}