Cod sursa(job #1229150)

Utilizator cdascaluDascalu Cristian cdascalu Data 16 septembrie 2014 17:24:24
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <cstring>
#include <fstream>
#define Nmax 100001
using namespace std;

char *p;
void read(char *s)
{
    ifstream f("evaluare.in");
    f.getline(s, Nmax);
    f.close();
}
int eval();
int termen();
int factor();
int main()
{
    char s[Nmax];
    read(s);

    p = s;
    ofstream g("evaluare.out");
    g<<eval();
    g.close();
    return 0;
}
int eval()
{
    int f = termen();
    while(*p == '+' || *p == '-')
    {
        if(*p == '+')
        {
            ++p;
            f += termen();
        }
        else if(*p == '-')
        {
            ++p;
            f -= termen();
        }
    }

    return f;
}
int termen()
{
    int t = factor();
    while(*p == '*' || *p == '/')
    {
        if(*p == '*')
        {
            ++p;
            t *= factor();
        }
        else if(*p == '/')
        {
            ++p;
            t /= factor();
        }
    }

    return t;
}
int factor()
{
    if(*p == '(')
   {
       ++p;
       int val = eval();
       ++p;
       return val;
   }

   int fact = 0;
   for(;*p >= '0' && *p <='9'; fact = fact * 10 + ((*p) - '0'), ++p);

   return fact;
}