Cod sursa(job #1358102)

Utilizator danalex97Dan H Alexandru danalex97 Data 24 februarie 2015 12:58:27
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;

ifstream F("evaluare.in");
ofstream G("evaluare.out");

const int N = 100010;

char expr[N];

int eval(char*&);
int fact(char*&);
int term(char*&);

int term(char* &x)
{
    int ans = 0;
    if ( *x == '(' )
    {
        ++x;
        ans = eval(x);
        ++x;
    }
    else
        for (;*x >= '0' && *x <= '9';++x)
            ans = ans * 10 + int(*x - '0');
    return ans;
}

int fact(char* &x)
{
    int ans = term(x);
    while ( *x == '*' || *x == '/' )
    {
        int sgn = *x == '*' ? 1 : -1;
        ++x;
        ans = sgn == 1 ? ans * term(x) : ans / term(x);
    }
    return ans;
}

int eval(char* &x)
{
    int ans = fact(x);
    while ( *x == '+' || *x == '-' )
    {
        int sgn = *x == '+' ? 1 : -1;
        ++x;
        ans += sgn * fact(x);
    }
    return ans;
}

int main()
{
    F>>expr;
    char *x = expr;
    G<<eval(x)<<'\n';
}