zoukankan      html  css  js  c++  java
  • 9.14 | 学习笔记

    1.波兰表达式这个题目以前总是看到,但是一直觉得数字和运算符的存放好烦,学了栈以后发现其实很简单。

    然而接下来就是悲伤的故事,首先我第一次不小心把存放栈顶两个数字的运算结果的tmp设置成了int,丢失数据精度,

    接下来我改上面的问题时,因为太懒,把计数器也设置成了double,数组下标必须是int这个大概是常识,我个辣鸡以前一直不知道!!!

    贴原题和代码,请各位指正,我觉得输入那里写得好蠢

    #include <bits/stdc++.h>
    using namespace std;
    int cnt;
    double a,b,tmp;
    int jdg(string s)
    {
        if(s=="+"||s=="-"||s=="*"||s=="/")return 0;
        return 1;
    }
    stack <double>stk;
    string s[101];
    int main()
    {
        while(cin>>s[cnt])cnt++;
        for(int i=cnt-1;i>=0;i--)
        {
            if(jdg(s[i]))
            {
                if(s[i].find('.'))stk.push(atof(s[i].c_str()));
                else stk.push(1.0*atoi(s[i].c_str()));
            }
            else
            {
                a=stk.top();stk.pop();
                b=stk.top();stk.pop();
                if(s[i]=="+")tmp=a+b;
                else if(s[i]=="-")tmp=a-b;
                else if(s[i]=="*")tmp=a*b;
                else tmp=a/b;
                stk.push(tmp);
            }
        }
        cout<<fixed<<setprecision(6)<<stk.top()<<endl;
        return 0;
    }

     2.双向栈

    这个题目本身不难,可惜做它之前在学环形队列,所以考虑的有点复杂,其实只要设置一个足够大的数组就不用考虑它满了的情况,至于翻转笨想也知道不可能真的会去翻转,不然肯定超时,设置一个标记用来表示栈顶就好

    问题在于之前的环形队列,做的时候觉得自己想的很完备了,最后报错是run time error,这个错误其实常见的就是数组下标越界和除数为0两种情况......有一句tail=(tail+1)%MAXN,稳妥起见还是应写作tail=(tail+1+MAXN)%MAXN

  • 相关阅读:
    don't run elasticsearch as root.
    详细讲解安全升级MySQL的方法
    mysql sql优化实例1(force index使用)
    mysql的force index
    【C++】string类用法
    【GAN】GAN设计与训练集锦
    【C++】VS Code配置
    【Windows】win10:硬件良好,软件系统出错
    【Windows】快速启动软件 非点击软件图标 无限弹窗
    【Ubuntu】利用sudo修改/etc/sudoers翻车
  • 原文地址:https://www.cnblogs.com/MissCold/p/11520786.html
Copyright © 2011-2022 走看看