Cod sursa(job #2437503)

Utilizator DariusDCDarius Capolna DariusDC Data 9 iulie 2019 17:41:06
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.99 kb
/*#include <bits/stdc++.h>

using namespace std;

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

struct lista
{
    int value;
    lista* next;
};

lista* head = NULL;

bool viz[50001];

void addNode(lista* &head, int val)
{
    lista *p = new lista;
    p->value = val;
    p->next = head;

    head = p;
}

void afis()
{
    while (head != NULL)
    {
        fout << head->value << " ";
        head = head->next;
    }
}

int n, m;

vector <int> G[50001];

void dfs(int nod)
{
    viz[nod] = true;
    for (unsigned int i = 0; i < G[nod].size(); i++)
    {
        int vecin = G[nod][i];
        if (viz[vecin])
            continue;
        dfs(vecin);
    }
    addNode(head, nod);
}

int main()
{
    fin >> n >> m;
    while (m--)
    {
        int x, y;
        fin >> x >> y;
        G[x].push_back(y);
    }
    for (int i = 1; i <= n; i++)
        if (!viz[i])
            dfs(i);
    afis();
    return 0;
}
*/

#include <bits/stdc++.h>

using namespace std;

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

string s;

int termen(int&);
int expresie(int&);
int factor(int&);
int numar(int&);

int expresie(int &p)
{
    int r=termen(p);
    while(s[p]=='+' or s[p]=='-')
    {
        p++;
        if(s[p-1]=='+') r+=termen(p);
        else r-=termen(p);
    }
    return r;
}

int termen(int &p)
{
    int r=factor(p);
    while(s[p]=='/' or s[p]=='*')
    {
        p++;
        if(s[p-1]=='*') r*=factor(p);
        else r/=factor(p);
    }
    return r;
}

int factor(int &p)
{
    int r=0;
    if(s[p]=='(')
    {
        p++;
        r=expresie(p);
        if(s[p]==')') p++;
    }
    else r=numar(p);
    return r;
}

int numar(int &p)
{
    int nr=0;
    while(s[p]>='0' and s[p]<='9')
    {
        nr*=10;
        nr+=(s[p]-'0');
        p++;
    }
    return nr;
}

int main()
{
    fin >> s;
    int p=0;
    fout << expresie(p);
    return 0;
}