zoukankan      html  css  js  c++  java
  • 5238-整数校验器-洛谷3月赛gg祭

    传送门

    题目描述

    有些时候需要解决这样一类问题:判断一个数 x是否合法。

    x合法当且仅当其满足如下条件:

    • x格式合法,一个格式合法的整数要么是 0,要么由一个可加可不加的负号,一个 19 之间的数字,和若干个 0 到 9 之间的数字依次连接而成。
    • x在区间 [l,r] 范围内(即 l≤x≤r)。

    你需要实现这样一个校验器,对于给定的 l,r,多次判断 x是否合法。

    输入输出格式

    输入格式:

    第一行三个整数 l,r,T,表示校验器的校验区间为 [l,r]以及需要校验的 x 的个数。

    接下来 T行,每行一个 x,表示要校验的数,保证 x长度至少为 1且仅由 '0'~'9' 及 '-' 构成,且 '-' 只会出现在第一个字符。

    输出格式:

    输出共 T 行,每行一个整数,表示每个 xx 的校验结果。

    校验结果规定如下:0表示 x 合法;1 表示 x 格式不合法;2 表示 x 格式合法且不在 [l,r] 区间内。

    输入输出样例

    输入样例#1: 复制
    -3 3 4
    0
    00
    -0
    100000000000000000000
    输出样例#1: 复制
    0
    1
    1
    2
    

    说明

    对于 100% 的数据,0T512,l,r64 位有符号整型范围内

    保证输入文件大小不超过 128KB。数据在 linux 下生成,没有 ' ' 字符。

    以下为部分特殊限制(互不包含):

    • 5%的数据,T=0
    • 25%的数据,保证 x 格式一定合法。
    • 30% 的数据,保证如果 x 格式合法,那么 x 一定在 64 位有符号整形范围内。

    ---------------------------------------------------------------------------------------------------------------------------------------------------

     这是一道很简单很简单很简单的模拟

    只是要注意到的点有很多

    (我真的真的都注意到了

    但是由于dr太弱太弱了

    (尤其是代码能力和debug精神)

    于是dr就写乱了

    啊啊啊啊啊啊

    5分gg

    (dr第一次参加乐多赛,不懂规则,提交多了,还扣了几分,就更可怜了)

    注意注意注意啦!!!!!!

    码风要好!!!!

    不能太慌张!!!

    多读题!!!!!

    先理好思路在写!

    多刷题!!!!!

    -----------------------------------------------------------------------------------------------------------------

    #include<bits/stdc++.h> 
    using namespace std;
    
    typedef long long ll;
    ll l,r;
    int t;
    
    inline int read()
    {
        int sum = 0,p = 1;
        char ch = getchar();
        while(ch < '0' || ch > '9')
        {
            if(ch == '-')
                p = -1;
            ch = getchar();
        }
        while(ch >= '0' && ch <= '9')
        {
            sum = sum * 10 + ch - '0';
            ch = getchar();
        }
        return p * sum;
    }
    
    int main()
    {
        scanf("%lld%lld",&l,&r);
        t = read();
        while(t--)
        {
            char qwq[1005];
            cin>>(qwq + 1);
            int len = strlen(qwq+1);
            if(qwq[1] == '-')
            {
                if(qwq[2] == '0' ||len == 1)
                {
                    printf("1
    ");
                    continue;
                }
            }
            if(qwq[1] == '0' && len != 1)
            {
                printf("1
    ");
                continue;
            }
            if(qwq[1] == '-' && len > 20)
            {
                printf("2
    ");
                continue;
            }
            if(qwq[1] != '-' && len > 19)
            {
                printf("2
    ");
                continue;
            }
            
            unsigned long long ans = 0;
            ll cnt = 0;
            if(qwq[1] == '-')
            {
                sscanf(qwq+2,"%llu",&ans);//从字符串的第二位开始读,把后面的所有数字转换为一个unsigned long long类型变量tmp后再进行处理。
                if(ans > (1LL<<63))
                {
                    
                    printf("2
    ");
                    continue;
                }
                cnt=-ans;
            }
            else
            {
                sscanf(qwq+1,"%llu",&ans);
                if (ans>=(1LL<<63))
                {
                    printf("2
    ");
                    continue;
                }
                cnt=ans;
            }
            puts(cnt>=l && cnt<=r?"0":"2");
            
        }
        return 0;
    } 

    用一下sstream里面的sscanf可以帮助简化代码

     
  • 相关阅读:
    jquery.autocomplete 使用解析
    《SEO实战密码》
    Thinkphp 生成的验证码不显示问题解决
    css去除li的小圆点
    css隐藏input边框阴影
    HBuilde 申请密钥证书
    请求筛选模块被配置为拒绝包含 hiddenSegment 节的 URL 中的路径
    js 判断屏幕下拉上滑操作
    gis 从WGS84转百度
    GIS个坐标系转换
  • 原文地址:https://www.cnblogs.com/darlingroot/p/10463044.html
Copyright © 2011-2022 走看看