Cod sursa(job #145509)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 28 februarie 2008 21:31:26
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<stdio.h>
#include<string.h>
FILE*fin=fopen("evaluare.in","r");
FILE*fout=fopen("evaluare.out","w");
#define maxn 100005
int p;
char s[maxn];
int eval();int factor();
int termen()
{
  int rez=0;
  while(s[p]<='9'&&s[p]>='0')
  {
    rez=rez*10+s[p]-'0';
    p++;
  }
  return rez;
}
int factor()
{
  int rez=1;
  char semn='*';
  while(semn=='*'||semn=='/')
  {
    if(semn=='*')
    {
      if(s[p]=='(')
      {
	p++;
	rez*=eval();
      }
      else rez*=termen();
    }
    else
    {
      if(s[p]=='(')
      {
	p++;
	rez/=eval();
      }
      else rez/=termen();
    }
    semn=s[p];
    p++;
  }
  p--;
  return rez;
}
int eval()
{
  int rez=0;
  rez+=factor();
  while(s[p]=='+'||s[p]=='-')
  {
    if(s[p]=='+'){p++;rez+=factor();}
    else{p++;rez-=factor();}
  }
  p++;
  return rez;
}
int main()
{
  int n;
  fscanf(fin,"%s",&s);
  fclose(fin);
  n=strlen(s);
  s[n]=')';
  p=0;
  fprintf(fout,"%d",eval());
  fclose(fout);
  return 0;
}