Cod sursa(job #1100594)

Utilizator MoneaVladMonea Vlad MoneaVlad Data 7 februarie 2014 05:41:11
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <iostream>
#include <string.h>

using namespace std;

ifstream in ("evaluare.in");
ofstream out ("evaluare.out");

int p;
char s[100001];
int eval();
int termen();
int factor();
int nr();
int main()
{
    in.get(s,100000);
    out << eval() << '\n';
    in.close();
    out.close();
    return 0;
}
int eval()
{
    int r = termen();
    while (s[p] == '+' || s[p] == '-')
    {
        if (s[p] == '+')
        {
            ++p;
            r += termen();
        }
        else
        {
            p++;
            r -= termen();
        }
    }
    return r;
}
int termen()
{
    int r = factor();
    while (s[p] == '*' || s[p] == '/')
    {
        if (s[p] == '*')
        {
            p++;
            r*=factor();
        }
        else
        {
            p++;
            r /= factor();
        }
    }
    return r;
}
int factor()
{
    int r;
    if (s[p] == '(')
    {
        p++;
        r=eval();
        p++;
    }
    else if (s[p]<='9' && s[p]>='0')
    {
        r=nr();
    }
    return r;
}
int nr()
{
    int x = 0;
    while (s[p] >= '0' && s[p] <= '9')
    {
        x = x * 10 + (s[p] - '0');
        p++;
    }
    return x;
}