Cod sursa(job #2091545)

Utilizator aturcsaTurcsa Alexandru aturcsa Data 19 decembrie 2017 20:29:34
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <iostream>
#include <fstream>
#include <string>
#include <stack>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
string A;
int ecif(int ind)
///digit in caiet
{
    if('0'<=A[ind]&&A[ind]<='9')
        return 1;
    else
        return 0;
}
int eadun(int ind)
///is_op1 in caiet adica + si -
{
    if(A[ind]=='+'||A[ind]=='-')
        return 1;
    else
        return 0;
}
int einmul(int ind)
/// is_op2 in caiet adica * si /
{
    if(A[ind]=='*'||A[ind]=='/')
        return 1;
    else
        return 0;
}
int nr(int &ind)
///factor in caiet
{
    int adunare(int &a);
    if(A[ind]=='(')
    {
        int r=adunare(++ind);
        ind++;
        return r;
    }
    int r=0;
    while(ind<=A.size() && ecif(ind))
    {
        r=r*10+A[ind]-'0';
        ind++;
    }
    return r;
}
int termen(int &ind)
///ca in caiet
{
    int p=nr(ind);
    while (ind<=A.size()&&einmul(ind))
    {
        if(A[ind]=='*')
            p*=nr(++ind);
        else
            p/=nr(++ind);
    }
    return p;
}
int adunare(int &ind)
{
    int a=termen(ind);
    while(ind<=A.size()&&eadun(ind))
    {
        if(A[ind]=='+')
            a+=termen(++ind);
        else
            a-=termen(++ind);
    }
    return a;
}
int main()
{
    fin>>A;
    int i=0;
    fout<<adunare(i);
    return 0;
}