hdu 1237 使用递归实现

#include
#include
int bContain(char *s,char c1,char c2)
{
   char *p=s;
   while(*p!='\0'){ if(*p==c1||*p==c2) return 1; p++;}
   return 0;
}
double Mul(char *s,double *val,char p)
{
  char s1[250],s2[250],op;
  if(!bContain(s,'*','/'))
  {  if(p=='*') *val*=atof(s);
      else *val/=atof(s);
  }
  else
  {
      sscanf(s,"%[^*/]%c%s",s1,&op,s2);
      if(p=='*') *val*=atof(s1);
      else *val/=atof(s1);
      return Mul(s2,val,op);     
  }
}
double Add(char *s,double *v,char pp)
{
   char s1[250],s2[250],op;
   double d;
   if(!bContain(s,'+','-'))
   {
       d=1;
       Mul(s,&d,'*');
       if(pp=='+')*v+=d;
       else *v-=d;    
   }
   else
   {
      sscanf(s,"%[^+-]%c%s",s1,&op,s2);
      d=1;Mul(s1,&d,'*');
      if(pp=='+') *v+=d;
      else *v-=d;
      return Add(s2,v,op);
   }
}

int main()
{
  char express[1000],*p,*q;
  char temp[1000];
  double val=1;
  while(gets(temp)&&strcmp(temp,"0"))
  {
     p=temp;q=express;
     while(*p!='\0'){if(*p!=' ')*q++=*p;p++;} *q='\0';
     val=0;
     Add(express,&val,'+');
     printf("%.2f\n",val);
  }
   return 1;
}

转载于:https://www.cnblogs.com/Anti2005/archive/2010/06/10/1755186.html

你可能感兴趣的:(hdu 1237 使用递归实现)