标签:style blog http color io ar for 数据 sp
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 那么肯定是NO 14 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){//判断前导0 30 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 }
标签:style blog http color io ar for 数据 sp
原文地址:http://www.cnblogs.com/xuqiulin/p/4010363.html