Cod sursa(job #1674723)

Utilizator rexlcdTenea Mihai rexlcd Data 4 aprilie 2016 20:26:53
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>

using namespace std;

char s[100002];
int pos;

long termen();
long factor();

long eval()
{
    long r=termen();
    while(s[pos]=='+' || s[pos]=='-')
    {
        if(s[pos]=='+')
        {
            pos++;
            r+=termen();
        }
        else if(s[pos]=='-')
        {
            pos++;
            r-=termen();
        }
    }
    return r;
}

long termen()
{
    long r=factor();
    while(s[pos]=='*' || s[pos]=='/')
    {
        if(s[pos]=='*')
        {
            pos++;
            r*=factor();
        }
        else if(s[pos]=='/')
        {
            pos++;
            r/=factor();
        }
    }
    return r;
}

long factor()
{
    long r=0;
    if(s[pos]=='(')
    {
        pos++;
        r=eval();
        pos++;
    }
    else
        while(isdigit(s[pos]))
        {
            r=r*10+(s[pos]-'0');
            pos++;
        }
    return r;
}

int main()
{
    ifstream f("evaluare.in");
    ofstream g("evaluare.out");
    f>>s;
    g<<eval();
    f.close();
    g.close();
    return 0;
}