Cod sursa(job #2327800)

Utilizator BaraianTudorBaraian Tudor Stefan BaraianTudor Data 24 ianuarie 2019 23:01:43
Problema Evaluarea unei expresii Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
char c[100005];
int exp(int & st);
int prod(int & st);
int eval(int & st);
int nr(int & st)
{
    int a=0;
    while(isdigit(c[st]) && st<=strlen(c))
    {
        a=a*10+c[st]-'0';
        st++;
    }
    return a;
}

int prod(int & st)
{
    int a=exp(st);
    while(c[st]=='*' || c[st]=='/')
    {
        ++st;
        if(c[st-1]=='/')
        {
            a/=exp(st);
        }
        if(c[st-1]=='*')
        {
            a*=exp(st);
        }
    }
    return a;
}
int exp(int & st)
{
    if(c[st]!='(')
    {
        return nr(st);
    }
    else
    {
        ++st;
        int a=eval(st);
        ++st;
        return a;
    }
}
int eval(int & st)
{
    int a=prod(st);
    while(c[st] =='+' || c[st]=='-')
    {
        ++st;
        if(c[st-1]=='+')a+=prod(st);
        else a-=prod(st);
    }
    return a;
}
int main()
{
    in.getline(c+1,100005);
    c[0]='(';
    c[strlen(c)]=')';
    int st=0;
    out<<exp(st);
    return 0;
}