Cod sursa(job #1148491)

Utilizator ciubakkaCiobotarasu Vlad ciubakka Data 20 martie 2014 20:29:29
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <fstream>
#include <string>
#include <queue>
#define nr 100001
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[nr];
char *p=s;

long termen();
long fact();

long calc()
{
    long r=termen();
    while(*p=='+' || *p=='-')
    {switch(*p)
    {
    case '+':
        ++p;
        r+=termen();
        break;
    case '-':
        ++p;
        r-=termen();
        break;
    }}
    return r;
}
long termen()
{
    long r=fact();
    while(*p=='*' || *p=='/')
    {  switch(*p)
    {case '*':
        ++p;
        r*=fact();
        break;
    case '/':
        ++p;
        r/=fact();
        break;
    }}
    return r;
}
long fact()
{
    long r=0;
    if(*p=='(')
    {
        ++p;
        r=calc();
        ++p;
    }
    else while(*p>='0' && *p<='9')
           {r=r*10+*p-'0';
            ++p;}
    return r;
}
int main()
{
    char c;
    int i=1;
    while(f>>c)
        {
            s[i]=c;
            i++;
        }
    g<<calc();
    return 0;
}