Cod sursa(job #1806551)

Utilizator croi01Henry Croitor Jr. croi01 Data 15 noiembrie 2016 15:10:55
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <cstring>
#include <ctype.h>

using namespace std;
int p = 0;
char s[100001];

int termen(void);
int factor(void);
int expresie(void);

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

int expresie()
{
    int sum = termen();
    while(s[p] == '+' || s[p] == '-')
    {
        if(s[p] == '+')
        {
            p++;
            sum+=termen();
        }
        else
        {
            p++;
            sum-=termen();
        }
    }
    return sum;
}

int factor()
{
    int semn = 1;
    int rez = 0;
    while(s[p] == '-')
    {
        p++;
        semn *= -1;
    }
    if(s[p] == '(')
    {
        p++;
        rez = expresie();
        p++;
        return rez*semn;
    }
    while(isdigit(s[p]))
    {
        rez = rez*10 + (s[p] -'0');
        p++;
    }
    return semn*rez;
}

int main()
{
    FILE * fp;
    fp = fopen("evaluare.in","r");
    fgets(s,100001,fp);
    int a = expresie();
    printf("%i",a);
    fclose(fp);
    fp = fopen("evaluare.out","w");
    fprintf(fp,"%i",a);
    fclose(fp);
    return 0;
}