zoukankan      html  css  js  c++  java
  • BestCoder12 1002.Help him(hdu 5059) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5059

    题目意思:就是输入一行不多于 100 的字符串(除了' ' 和 ' ' 的任意字符),问是否是合法的整数,如果是的话问是否在[a, b] 范围内,是则输出 YES,否则输出 NO

    合法的整数:(1)非负整数:只有数字,没有前导0

                (2)负数:负号后面只能跟着数字,负号前没有任何字符

         首先这条题感觉不是出得太好,不过都是硬着头皮学人家做啦。反正一些很变态的数据可能还是过不了,但却AC的。

         模拟题一般都是比较恶心的!!!

         AC 代码:

       

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 #include <string>
     6 using namespace std;
     7 
     8 typedef __int64 LL;
     9 
    10 inline int check(string s, int st)
    11 {
    12     int f = 0;     // 初始化很重要!
    13     for (int i = st; i < s.size(); i++)
    14     {
    15         f = 0;
    16         if (s[i] < '0' || s[i] > '9')
    17             break;
    18         f = 1;
    19     }
    20     return f;
    21 }
    22 
    23 inline LL judge(string s, int sign, int st)
    24 {
    25     LL num = 0;
    26     for (int i = st; i < s.size(); i++)
    27         num = num * 10 + (s[i]-'0');
    28     num *= sign;
    29     return num;
    30 }
    31 
    32 int main()
    33 {
    34     int a, b;
    35     string s;
    36     while (getline(cin, s))
    37     {
    38         scanf("%d%d", &a, &b);
    39         getchar();
    40         int flag = 0;
    41         if (s[0] == '-')
    42             flag = check(s, 1);
    43         else
    44             flag = check(s, 0);
    45         // 特判0的几种情况
    46         if (s[0] == '0' && s.size() != 1)
    47             flag = 0;
    48         if (s[0] == '0' && s.size() == 1)
    49             flag = 1;
    50         if (s[0] == '-' && s[1] == '0')
    51             flag = 0;
    52         if (!flag)
    53         {
    54             printf("NO
    ");
    55             continue;
    56         }
    57         // 处理到这里之后就是合法整数了,之后从string转换成__int64
    58         LL ans = 0;
    59         if (s[0] == '-')
    60             ans = judge(s, -1, 1);
    61         else
    62             ans = judge(s, 1, 0);
    63         if (s.size() == 0 || s.size() >= 12 || ans < a || ans > b)  // 有长度限制,不能超出区间
    64             printf("NO
    ");
    65         else
    66             printf("YES
    ");
    67     }
    68     return 0;
    69 }
  • 相关阅读:
    pop动画
    CoreData的用法
    高德地图详细使用方法
    GDataXML配置过程
    图片懒加载(仿SDWebImage)
    GCD创建单例
    多线程-多线程基础
    Zookeeper-集群与单机实践
    oracle-union all与order by联合使用
    分布式和集中式架构
  • 原文地址:https://www.cnblogs.com/windysai/p/4008826.html
Copyright © 2011-2022 走看看