Cod sursa(job #1865131)

Utilizator radu.millio15Radu Millio radu.millio15 Data 1 februarie 2017 14:10:53
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <stdio.h>
using namespace std;
int i;
int termen();
int expresie();
int factor();
char s[100005];
int expresie()
{
    int sum=termen();
    while(s[i]=='+' || s[i]=='-')
    {
        if(s[i]=='+')
        {
            i++;
            sum=sum+termen();

        }
        if(s[i]=='-')
        {
            i++;
            sum=sum-termen();

        }
    }
    return sum;
}
int termen ()
{
    int sum=factor();
    while(s[i]=='*' || s[i]=='/')
    {
        if(s[i]=='*')
        {
            i++;
            sum=sum*factor();
        }
        if(s[i]=='/')
        {
            i++;
            sum=sum/factor();
        }
    }
    return sum;
}
int factor()
{
    int nr=0;
    int semn=1;
    if(s[i]=='-')
        semn=-1;

    if(isdigit(s[i]))
    {
        nr=s[i]-'0';
        i++;
        while(isdigit(s[i]))
        {
            nr=nr*10+(s[i]-'0');
            i++;
        }
        nr=nr*semn;
    }
    else if(s[i]=='(')
    {
        i++;
        nr=expresie();
        i++;
    }
    return nr;
}

int main()
{
    FILE *fin, *fout;
    fin=fopen("evaluare.in", "r");
    fout=fopen("evaluare.out", "w");
    fscanf(fin, "%s", s);
    fprintf(fout, "%d", expresie());
    return 0;
}