Cod sursa(job #1892332)

Utilizator robertkarolRobert Szarvas robertkarol Data 24 februarie 2017 21:40:00
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <bits/stdc++.h>
#define lmax 100001
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char sir[lmax];
long expresie(char* &sir);
long termen(char* &sir);
long factor(char* &sir);
long numar(char* &sir);
long expresie(char* &sir)
{
    long raspuns=termen(sir);
    while(sir[0]=='+'||sir[0]=='-')
        if(sir[0]=='+')
        {
            sir++;
            raspuns+=termen(sir);
        }
        else
        {
            sir++;
            raspuns-=termen(sir);
        }
    return raspuns;
}
long termen(char* &sir)
{
    long raspuns=factor(sir);
    while(sir[0]=='*'||sir[0]=='/')
        if(sir[0]=='*')
        {
            sir++;
            raspuns*=factor(sir);
        }
        else
        {
            sir++;
            raspuns/=factor(sir);
        }
    return raspuns;
}
long factor(char* &sir)
{
    long raspuns;
    if(sir[0]=='(')
    {
        sir++; // '('
        raspuns=expresie(sir);
        sir++; // ')'
    }
    else if(sir[0]>='0'&&sir[0]<='9') raspuns=numar(sir);
    return raspuns;
}
long numar(char* &sir)
{
    long raspuns=0;
    while(sir[0]>='0'&&sir[0]<='9')
    {
        raspuns=raspuns*10+(sir[0]-'0');
        sir++;
    }
    return raspuns;
}
int main()
{
    fin>>sir;
    char* s=sir;
    fout<<expresie(s);
    return 0;
}