标签:hdu bc bestcoder
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5059
Problem Description
As you know, when you want to hack someone‘s program, you must submit your test data. However sometimes you will submit invalid data, so we need a data checker to check your data. Now small W has prepared a problem for BC, but he is too busy to write the data
checker. Please help him to write a data check which judges whether the input is an integer ranged from a to b (inclusive).
Note: a string represents a valid integer when it follows below rules.
1. When it represents a non-negative integer, it contains only digits without leading zeros.
2. When it represents a negative integer, it contains exact one negative sign (‘-‘) followed by digits without leading zeros and there are no characters before ‘-‘.
3. Otherwise it is not a valid integer.
Input
Multi test cases (about 100), every case occupies two lines, the first line contain a string which represents the input string, then second line contains a and b separated by space. Process to the end of file.
Length of string is no more than 100.
The string may contain any characters other than ‘\n‘,‘\r‘.
-1000000000≤a≤b≤1000000000
Output
For each case output "YES" (without quote) when the string is an integer ranged from a to b, otherwise output "NO" (without quote).
Sample Input
Sample Output
Source
题意:
给定一个字符串,如果这个字符串是一个整数,并这个整数在[a,b]的范围之内,输出YES,其它的输出NO。
这个字符串是整数的条件:
1、如果它是正整数,它只包含前导不是0的数(这个数前面没有零)。
2、如果它是负整数,只包含一个‘-‘符号,任然没有前导0。
3、除此之外都不是非法的
PS:
注意前导零,和非法字符!
代码如下:
#include <cstdio>
#include <cstring>
const int maxn = 517;
char str[maxn], ans[maxn];
typedef __int64 LL;
int flag = 0, mark = 0;
LL ATOL(char s[])
{
int len = strlen(s);
LL tt = 0;
int i = 0;
if(s[0] == '-')//负号
{
mark = 1;
i++;
}
for(; i < len; i++)
{
if(s[i]<'0' || s[i]>'9')//非法字符
{
flag = 1;
break;
}
if(tt == 0 && s[i]=='0' && len > 1)
{
//前导零
flag = 1;
break;
}
tt = tt*10+s[i]-'0';
}
return tt;
}
int main()
{
LL a, b;
LL tt;
while (gets(str))
{
flag = 0;
mark = 0;
scanf("%I64d%I64d", &a, &b);
getchar();
int len = strlen(str);
if (len >= 13 || len == 0)
{
printf("NO\n");
continue;
}
//tt = atol(str);
tt = ATOL(str);
//printf("tt:: %I64d\n",tt);
if(mark && tt == 0)//-0
{
printf("NO\n");
continue;
}
if(flag)
{
printf("NO\n");
continue;
}
if(mark)//负数
tt = -tt;
if (a <= tt && tt <= b)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
HDU 5059 Help him (模拟)
标签:hdu bc bestcoder
原文地址:http://blog.csdn.net/u012860063/article/details/40015539