Cod sursa(job #1462920)

Utilizator sorynsooSorin Soo sorynsoo Data 19 iulie 2015 13:55:20
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
//Varianta cu recursivitate indirecta
#include <fstream>
#include <string.h>
using namespace std;

#define MAXSIR 100005
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");

char str[MAXSIR],*p;
int adunare();
int produs();
int calcul();

int main()
{
    cin.getline(str,MAXSIR); p=str;
    cout<<adunare();
}

int adunare()
{
    int val=produs();
    while(*p=='+' || *p=='-')
    {
        if(*p=='+')
        {
            ++p;
            val+=produs();
            continue;
        }
        if(*p=='-')
        {
            ++p;
            val-=produs();
            continue;
        }
        break;

    }
    return val;
}
int produs()
{
    int val=calcul();
    while(*p=='*' || *p=='/')
    {
        if(*p=='*')
        {
            ++p;
            val*=calcul();
            continue;
        }
        if(*p=='/')
        {
            ++p;
            val/=calcul();
            continue;
        }
        break;
    }
    return val;
}
int calcul()
{
    int val=0;
    if(*p=='(')
    {
        ++p;
        val+=adunare();
        ++p;
    }
    else
    {
        while(isdigit(*p))
        {
            val=val*10+*p-'0';
            ++p;
        }
    }
    return val;
}