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;
}