首页 > 代码库 > HDU 5059 Help him(简单模拟题)
HDU 5059 Help him(简单模拟题)
http://acm.hdu.edu.cn/showproblem.php?pid=5059
题目大意:
给定一个字符串,如果这个字符串是一个整数,并且这个整数在[a,b]的范围之内(包括a,b),那就输出YES,其它的都是NO。
这个字符串是整数的条件:
1、如果它是正整数,它只包含前导不是0的数(这个数前面没有零)。
2、如果它是负整数,只包含一个‘-‘符号,任然没有前导0。
3、除此之外都不是非法的
解题思路:
http://bestcoder.hdu.edu.cn/ 这里有
要注意:
00
01
-
-0
-01
1 2
这些都是非法的
我一直错,原因是我没有考虑给定整数的大小。
它给定的字符串的长度不超过100。但是ab的范围是[-10^9,10^9],所以如果字符串长度超过10位,就一定是NO。
可是我当我把长度改10,11时都是wrong,改成13就对了。结题报告是12位。可能是它测试数据超过了10^9,总之按他解题报告,坑定能A的。
AC代码:
1 #include<stdio.h> 2 #include<string.h> 3 4 typedef __int64 LL; 5 6 int main(){ 7 char str[102]; 8 LL a, b; 9 while(gets(str)){10 scanf("%I64d%I64d", &a, &b);11 bool flag = 0;12 int len = strlen(str);13 if(len == 0 || len >= 13){//如果长度大于13 如果长度为0 那么肯定是NO14 flag = 1;15 }16 LL num = 0;17 if(!flag){18 int i = 0;19 bool sign = 0;20 if(str[0] == ‘-‘){//先判断第一个是‘-‘21 sign = 1;22 ++i;23 }24 for( ; i < len; ++i){25 if(str[i] < ‘0‘ || ‘9‘ < str[i]){//非法的字符26 flag = 1;27 break;28 }29 if(!num && str[i] == ‘0‘ && len > 1){//判断前导030 flag = 1;31 break;32 }33 num = num * 10 + str[i] - ‘0‘;34 }35 if(!flag){//是否含有非法字符36 if(sign && !num){//-0 考虑这种情况37 flag = 1;38 }else if(sign){//是负数39 num = -num;40 }41 }42 }43 44 if(!flag && a <= num && num <= b){45 puts("YES");46 }else{47 puts("NO");48 }49 getchar();//这里注意 因为用的事gets 所以要吃掉一个回车50 }51 return 0;52 }
HDU 5059 Help him(简单模拟题)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。