Cod sursa(job #2436272)

Utilizator Adrian_Popescu311Popescu Adrian Adrian_Popescu311 Data 5 iulie 2019 13:07:49
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fi("evaluare.in");
ofstream fo("evaluare.out");

char s[1000010];
char *p=s;

long int termen();
long int factor();

long int eval()
{
    long int r=termen();

    while(*p=='+'||*p=='-')
        switch(*p){
            case '+':
                ++p;
                r += termen();
                break;
            case '-':
                ++p;
                r -= termen();
                break;
        }

    return r;
}

long int termen()
{
    long int r=factor();

    while(*p=='*'||*p=='/')
        switch(*p){
            case '*':
                ++p;
                r *= factor();
                break;
            case '/':
                ++p;
                r /= factor();
                break;
        }

    return r;
}

long int factor()
{
    long int r=0;

    if( *p=='(' )
        {++p;
        r = eval();
        ++p;}
    else
    {
        while(*p>='0'&&*p<='9')
            {r = r*10 + *p - '0';
            ++p;}
    }

    return r;
}

int main()
{
    fi>>s;

    fo<<eval();

    return 0;
}