Cod sursa(job #2327761)

Utilizator BaraianTudorBaraian Tudor Stefan BaraianTudor Data 24 ianuarie 2019 22:07:57
Problema Evaluarea unei expresii Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.81 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
char c[100005];
bool numar(int st)
{
    if(c[st]>='0' && c[st]<='9')
        return 1;
        return 0;
}
int exp(int & st);
int prod(int a,int & st);

int nr(int & st)
{
    int a=c[st]-'0';
    while(numar(st+1) && st<=strlen(c))
    {
        st++;
        a=a*10+c[st]-'0';
    }
    return a;
}

int prod(int a,int & st)
{
    int t=0;
    st+=2;
    while( (((numar(st)) || (c[st]=='(')) && st<=strlen(c)) && (c[st-1]=='*' || c[st-1]=='/'))
    {
        if(c[st]>='0' && c[st]<='9')
        {

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