Cod sursa(job #2535401)

Utilizator teodortatomirTeodor Tatomir teodortatomir Data 31 ianuarie 2020 20:29:11
Problema Evaluarea unei expresii Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <stdio.h>
#include <stdlib.h>

int p;
char s[100001];
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]=='-'){
    semn=-semn;
    p++;
  }
  if(s[p]=='('){
    p++;
    val=expresie();
    p++;
    return semn*val;
  }
  while(s[p]>='0' && s[p]<='9'){
    val=val*10+(s[p]-'0');
    p++;
  }
  return semn*val;
}
int main(){
  FILE *fin,*fout;
  int i;
  char ch;

  fin=fopen("expresie.in", "r");
  fout=fopen("expresie.out", "w");
  fgets(s, 100001, fin);
  fclose(fin);

  fprintf(fout, "%d\n", expresie());
  fclose(fout);
  return 0;
}