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

 

你窥探过我最不安的手,在青春最寒冷的时候!

posted @ 2019-04-08 20:42  合当奋意向人生  阅读(120)  评论(0编辑  收藏  举报