Cod sursa(job #1442622)

Utilizator RazvanSSavu Razvan RazvanS Data 25 mai 2015 22:15:57
Problema Evaluarea unei expresii Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.57 kb
/* 
 * File:   main.c
 * Author: Razvan
 *
 * Created on May 25, 2015, 9:10 PM
 */

#include <stdio.h>
#include <stdlib.h>

#define FILE_IN "evaluare.in"
#define FILE_OUT "eveluare.out"

#define MAX_SIZE 100001

char S[MAX_SIZE], *p = S;

int fact(void)
{
    if (*p == '(')
    {
        p++;
        return eval();
    }
    int f=0;
    while('0'<= *p && *p <= '9')
        f = f*10 + *p++ - '0';
    return f;
}

int term(void)
{
    int prod = fact();
    while (*p)
    {
        switch(*p)
        {
            case '*':
            {
                p++;
                prod *= fact();
                break;
            }
            case '/':
            {
                p++;
                prod /= fact();
                break;
            }
            default:
                return prod;
        }
    }
    return prod;
}

int eval(void)
{
    int s = term();
    while (*p)
    {
      switch(*p)
        {
            case '+':
            {
                p++;
                s += term();
                break;
            }
            case '-':
            {
                p++;
                s -= term();
                break;
            }
            default:
            {
                p++;
                return s;
            }
        } 
    }
    p++;
    return s;
}

/*
 * 
 */
int main(int argc, char** argv) {
    freopen(FILE_IN, "r", stdin);
    freopen(FILE_OUT, "w", stdout);
    scanf("%s", S);
    printf("%d", eval());
    return (EXIT_SUCCESS);
}