题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5059
10 -100 100 1a0 -100 100
YES NO
题意:
给定一个字符串,如果这个字符串是一个整数,并这个整数在[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;
}
原文:http://blog.csdn.net/u012860063/article/details/40015539