Cod sursa(job #2109820)

Utilizator mihailrazMihail Turcan mihailraz Data 20 ianuarie 2018 10:32:24
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fi("evaluare.in");
ofstream fo("evaluare.out");
int p=0;
char S[100010];

long long termen();
long long factor();
long long eval();

long long termen()
{
    int rez=factor();
    while(S[p]=='*' || S[p]=='/')
    {
        if(S[p]=='*')
        {
            p++;
            rez*=factor();
            break;
        }
        else
            if(S[p]=='/')
            {
                p++;
                rez/=factor();
                break;
            }
    }
    return rez;
}

long long factor()
{
    long rez=0;
    if(S[p]=='(')
    {
        p++;
        rez=eval();
        p++;
    }
    else
    {
        while(S[p]>='0' && S[p]<='9')
        {
            rez=rez*10+(S[p]-'0');
            p++;
        }
    }
    return rez;
}

long long eval()
{
    int rez=termen();
    while(S[p]=='+' || S[p]=='-')
    {
        if(S[p]=='+')
        {
            p++;
            rez+=termen();
            break;
        }
        else
            if(S[p]=='-')
            {
                p++;
                rez-=termen();
                break;
            }
    }
    return rez;
}

int main()
{
    fi>>S;
    fo<<eval();
    fi.close();
    fo.close();
    return 0;
}