Cod sursa(job #676659)

Utilizator AplayLazar Laurentiu Aplay Data 9 februarie 2012 14:31:57
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<stdio.h>
#include<string.h>
char v[100100];

int plus_min(int &k);
int inm_imp(int &k);

void citire()
{
    FILE *f=fopen("evaluare.in","r");
    fgets(v,100100,f);
    int n=strlen(v);
    if(v[n-1]=='\n') v[n-1]=NULL;
    fclose(f);
}

int paranteze(int &k)
{
    int ret=0;
    if(v[k]=='(')
    {
        ++k;
        ret = plus_min(k);
        ++k;
    }
    else
        while(v[k]>='0'&&v[k]<='9')
            ret = ret*10+v[k++]-'0';

    return ret;
}

int inm_imp(int &k)
{
    int ret = paranteze(k);

    while(v[k]=='*'||v[k]=='/')
        if(v[k++]=='*')
            ret  =ret * paranteze(k);
        else
            ret  =ret / paranteze(k);

    return ret;
}

int plus_min(int &k)
{
    int ret = inm_imp(k);

    while(v[k]=='+' || v[k] == '-')
        if(v[k++] == '+')
            ret += inm_imp(k);
        else
            ret -=inm_imp(k);

    return ret;
}

int main()
{
    citire();
    int k=0;
    FILE*f=fopen("evaluare.out","w");
    fprintf(f,"%d",plus_min(k));
    fclose(f);
    return 0;
}