hdu1237(表达式求值)
怎么讲呢,我做这题做了很久都没有做出来,然后我是看别人博客才写出来的。
这是那个大佬的博客链接:https://blog.csdn.net/su20145104009/article/details/47374383
做完这题给我什么感觉呢,做题一定要细心!细心!细心!重要的事情说三遍!!!
ac代码:
#include<stdio.h> #include<string.h> int main() { char str[205]; char fuhao[100];//存符号 double num[100],sum;//num数组存数字 while(gets(str)&&strcmp(str,"0")!=0)//这里要注意判断str=="0"的情况,一个小技巧 { int len=strlen(str); int t=0,q=0; memset(num,0,sizeof(num)); memset(fuhao,0,sizeof(fuhao)); for(int i=0;i<len;i++) { if(str[i]>='0'&&str[i]<='9')//这里是要判断数字可能是多位数 { double temp=0; while(str[i]>='0'&&str[i]<='9') temp=temp*10+str[i]-'0',i++;//个人觉得这个操作很巧妙 num[q++]=temp;//存数字 } else if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/') fuhao[t++]=str[i];//存符号 } memset(str,0,sizeof(0)); sum=num[0]; for(int i=1;i<q;i++)//这一步的作用是让数字和符号可以更简单的用一个变量控制 num[i-1]=num[i]; for(int i=0;i<t;i++) { if(fuhao[i]=='*') sum=sum*num[i]; else if(fuhao[i]=='/')//乘除的话直接算 sum=sum/num[i]; else if(fuhao[i]=='+')//加减的话要判断他的下一个符号 { if(fuhao[i+1]=='*'||fuhao[i+1]=='/'&&i+1<t) { double temp=num[i]; while((fuhao[i+1]=='*'||fuhao[i+1]=='/')&&i+1<t)//又是如此巧妙的操作~ { if(fuhao[i+1]=='*') temp*=num[i+1],i++; if(fuhao[i+1]=='/') temp/=num[i+1],i++; } sum+=temp; } else sum+=num[i];//不是的话就直接加减喽~ } else if(fuhao[i]=='-') { if(fuhao[i+1]=='*'||fuhao[i+1]=='/'&&i+1<t) { double temp=num[i]; while((fuhao[i+1]=='*'||fuhao[i+1]=='/')&&i+1<t) { if(fuhao[i+1]=='*') temp=temp*num[i+1],i++; if(fuhao[i+1]=='/') temp=temp/num[i+1],i++; } sum=sum-temp; } else sum=sum-num[i]; } } printf("%.2lf\n",sum); } return 0; }
你窥探过我最不安的手,在青春最寒冷的时候!