Cod sursa(job #2742787)

Utilizator sims_glAlexandru Simion sims_gl Data 21 aprilie 2021 19:25:39
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
int n, poz;
char s[100000];
int eval();
int termen();
int factor();
int eval()
{
    int a= termen(), b;
    while(s[poz]=='+' || s[poz]=='-')
    {
        if(s[poz]=='+')
        {
            ++poz;
            b= termen();
            a=a+b;
        }
        else {
            ++poz;
            b=termen();
            a=a-b;
        }
    }
    return a;
}
int termen()
{
    int a= factor(),b;
    while(s[poz]=='*' || s[poz]=='/')
    {
        if(s[poz]=='*')
        {
            ++poz;
            b= factor();
            a=a*b;
        }
        else {
            ++poz;
            b=factor();
            a=a/b;
        }
    }
    return a;
}
int factor()
{
    int a;
    if(s[poz]=='(')
    {
        ++poz;
        a=eval();
        ++poz;
    }
    else
    {   a=0;
        while(poz<n && strchr("0123456789",s[poz])){
        a=a*10+s[poz]-'0';poz++;}
    }
    return a;
}

int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    cin>>s;
    n=strlen(s);
    cout<<eval();
}