• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
*Anti
博客园    首页    新随笔    联系   管理    订阅  订阅

hdu 1237 使用递归实现

#include<stdio.h>
#include<stdlib.h>
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;
}

posted @ 2010-06-10 00:37  *Anti  阅读(301)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3