• 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
    ",sum);
        }
        return 0;
    }

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

  • 相关阅读:
    设计模式的六大原则 ---- 理论知识
    动手编写TCP服务器系列之一:日志文件
    Shell语言系列之一:文件处理
    给Amazon ec2 增加卷(Volume)并挂载到系统
    Java打包问题之一:打包出现java.io.IOException: invalid header field
    struct中长度为0的数组用途与原理
    child和childNodes的区别
    学习es6 setter/getter研究
    tabIndex-bootstrap中Get到的
    tml兼容性
  • 原文地址:https://www.cnblogs.com/2000liuwei/p/10673251.html
Copyright © 2020-2023  润新知