Cod sursa(job #1813932)

Utilizator ivan.tudorIvan Tudor ivan.tudor Data 23 noiembrie 2016 15:12:27
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include<cstdio>
#include <ctype.h>
using namespace std;
#define N 100002
int p;
char s[N];
int expresie();
int termen();
int factor();
int expresie(){
  int sum=termen();
  while(s[p]=='+' || s[p]=='-'){
    if(s[p]=='+'){
      p++;
      sum+=termen();
    }
    else{
      p++;
      sum-=termen();
    }
  }
  return sum;
}
int termen(){
  int prod=factor();
  while(s[p]=='*' || s[p]=='/'){
    if(s[p]=='*'){
      p++;
      prod*=factor();
    }
    else{
      p++;
      prod/=factor();
    }
  }
  return prod;
}
int factor(){
  int val=0,semn=1;
  while(s[p]=='-'){
    p++;
    semn=-semn;
  }
  if(s[p]=='('){
    p++;
    val=expresie();
    p++;
    return semn*val;
  }
  while(isdigit(s[p])){
    val=val*10+(s[p]-'0');
    p++;
  }
  return semn*val;
}
int main()
{
    int rez;
    FILE*fin,*fout;
    fin=fopen("evaluare.in","r");
    fout=fopen("evaluare.out","w");
    fgets(s,N,fin);
    rez=expresie();
    fprintf(fout,"%d",rez);
    fclose(fin);
    fclose(fout);
    return 0;
}