Cod sursa(job #1251613)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 29 octombrie 2014 18:35:57
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <cstring>
#include <cctype>

using namespace std;

char sir[100005];
int n,poz;

int termen();
int factor();

int eval(){
    int ans=termen();

    while(1)
        if(sir[poz]=='+'){
            poz++;
            ans+=termen();
        }
        else if(poz=='-'){
            poz++;
            ans-=termen();
        }
        else
            break;

    return ans;
}

int termen(){
    int ans=factor();

    while(1)
        if(sir[poz]=='*'){
            poz++;
            ans*=factor();
        }
        else if(sir[poz]=='/'){
            poz++;
            ans/=factor();
        }
        else
            break;

    return ans;
}

int factor(){
    int ans=0;
    if(sir[poz]=='('){
        poz++;
        ans=eval();
        poz++;
    }
    else{
        while(poz<=n && isdigit(sir[poz])){
            ans*=10;
            ans+=(sir[poz++]-'0');
        }
    }

    return ans;
}

int main()
{
    ifstream cin("evaluare.in");
    ofstream cout("evaluare.out");

    cin.get(sir+1,100005);
    n=strlen(sir+1);

    poz=1;
    cout<<eval()<<'\n';

    cin.close();
    cout.close();
    return 0;
}