zoukankan      html  css  js  c++  java
  • luogu3月月赛T1 整数校验器

    铁炉堡传送门


    模拟,可以分成两部分:

    1.是否合法

    2.是否在范围内

    做法思路很简单

    1:排除两个不合法形式即可:开头为0的只能有1位,不能是单个的 ‘ - ’ 。

    2:也好想,题中给出的最大范围是long long 上限,超long long的直接输2continue,剩下的转成数的形式比较一下。

    问题在于做部分1时,数据是字符串形式,怎么把它转成整形并判断是否爆long long写着有点麻烦,蒟蒻还没学过字符串基础的我果然没敲完这部分。根据计算器结果(滑稽)2^64有20位,再判定下有无负号可以排除爆long long位数的部分。

    至于剩下的怎么转成整型,cz大佬题解里给了个黑科技——sstream库里的ssanf:sscanf(ch+2,"%llu",&tmp);//从字符串的第二位开始读,把后面的所有数字转换为一个unsigned long long类型变量tmp后再进行处理。

    代码如下:

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <cstring>
    #include <sstream>
    using namespace std;
    long long l,r;
    int t;
    char s[1000005];
    int main()
    {
        cin>>l>>r>>t;
        while (t--)
        {
            cin>>(s+1);
            int len=strlen(s+1);
            if(s[1]=='-')
            {
                if(s[2]=='0'||len==1)
                {
                    cout<<"1"<<endl;
                    continue;
                }
            }
            if(s[1]=='0'&&len!=1)
            {
                cout<<"1"<<endl;
                continue;
            }
            if (s[1]=='-'&&len>20)
            {
                puts("2");
                continue;
            }
            if (s[1]!='-'&&len>19)
            {
                puts("2");
                continue;
            }
            unsigned long long tmp=0;
            long long x=0;
            if(s[1]=='-')
            {
                sscanf(s+2,"%llu",&tmp);
                if (tmp>(1LL<<63))
                {
                    puts("2");
                    continue;
                }
                x=-tmp;
            }
            else
            {
                sscanf(s+1,"%llu",&tmp);
                if (tmp>=(1LL<<63))
                {
                    puts("2");
                    continue;
                }
                x=tmp;
            }
            puts(x>=l && x<=r?"0":"2");
        }
        return 0;
    }
  • 相关阅读:
    OSPF的简易模拟配置第二篇
    OSPF的简易模拟配置第一篇
    RIP简易配置第二篇
    linux常用命令集(压缩和归档操作-共16个)
    简易路由重分布配置
    linux常用命令集(磁盘和文件系统操作-共15个)
    简易的浮动静态路由配置
    神州数码DHCP及DHCP中继配置
    神州数码HSRP(热备份路由协议)配置
    神州数码策略路由(PBR)配置
  • 原文地址:https://www.cnblogs.com/charlesss/p/10463073.html
Copyright © 2011-2022 走看看