Cod sursa(job #2149952)

Utilizator OvidiuNicoleanuNicoleanu Ovidiu Augustin OvidiuNicoleanu Data 3 martie 2018 09:49:05
Problema Evaluarea unei expresii Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int i;
char s[100001];
int termen();
int factor();
int expresie()
{
    int t = termen();
    while(s[i] == '+' || s[i] == '-')
        if(s[i] == '+')
    {
        i++; t += termen();
    }
    else
        if(s[i] == '-')
        {
            i++;
            t -= termen();
        }
    /*daca e plusadaug la i si t + termen
    sau i creste si t - termen*/
    return t;
}
int termen()
{
    int t = factor();
    while(s[i] == '*' || s[i] == '/')
        if(s[i] == '*')
    {
        i++; t *= factor();
    }
    else
        if(s[i] == '/')
    {
        i++; t /= factor();
    }
    /*cat e * sau /
     daca e * i++ si t *factor
     daca e / i++ t/factor*/
     return t;
}
int factor()
{
    int t = 0;
    if(s[i] == '(')
    {
        i++; t = expresie(); i++;
    }
    else
        while(s[i] >= '0' && s[i] <= '9')
    {
        t = t*10 + s[i] - '0'; i++;
    }
    return t;
    /*daca s[i] == ()
    i++ t = expresie() i++
    elsecat timp >0 <9
    t*10 _ s[i] - 0
    i++*/
}
int main()
{
    fin.getline(s, 10001);
    fout << expresie();
    return 0;
}