Cod sursa(job #1512114)

Utilizator andreitulusAndrei andreitulus Data 27 octombrie 2015 18:32:16
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <stdio.h>
#define maxn 100010
using namespace std;

char s[maxn];
int k = 0;

int termen();
int factor();
int parsare();



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

    while(s[k] == '+' || s[k] == '-')
    {
        k++;

        if(s[k - 1] == '+')
            sol += factor();
        else
            sol -= factor();
    }

    return sol;
}



int factor()
{
    int sol = parsare();

    while(s[k] == '*' || s[k] == '/')
    {
        k++;

        if(s[k - 1] == '*')
            sol *= parsare();
        else
            sol /= parsare();

    }

    return sol;
}



int parsare()
{
    int sol = 0;

    if(s[k] == '(')
    {
        k++;
        sol = termen();
        k++;
    }
    else
        for(; s[k] >= '0' && s[k] <= '9'; k++)
            sol = sol * 10 + s[k] - '0';

    return sol;
}




int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w", stdout);

    scanf("%s",s);
    printf("%d",termen());

    fclose(stdin);
    fclose(stdout);

    return 0;
}