题目大意 给你个字符串 判断是否是合法的整数 (没前导0) 且值在给出的a b之间
感觉上是很水的一道题,实际上坑点挺多
首先字符串不包括 回车'\n' 和 换行'\r' 结果我把'\r'给当成空格了 这顿wa啊。。。 后来反应过来了,既然有空格,肯定不能再用scanf了 我用的gets 但gets会吃单回车 所以输入完a b要getchar吃回车 输入弄完了 判断是很容易的 有符号就从第一位开始 按位判断是否合法 处理成的数如果太大也肯定非法 直接减掉
另外的tirck点还有 单负号(非法) 单0(合法) 负0(非法) 空串(非法)
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#include<set>
#include<stack>
#define bug puts("bugbugbug");
using namespace std;
typedef long long ll;
int main()
{
char a[105];
while(gets(a))
{
ll aa,bb;
int flag=0;
ll sum=0;
scanf("%lld%lld",&aa,&bb);
getchar();
if(strlen(a)==0)
{
puts("NO");
continue;
}
int fu=0;
if(a[0]=='-')
fu=1;
int la=strlen(a);
if(la==fu)
{
flag=1;
}
if(la==1&&a[0]=='0')
{
if(aa<=0&&bb>=0)
puts("YES");
else
puts("NO");
continue;
}
if(a[fu]=='0')flag=1;
else
for(int i=fu;i<la; i++)
{
if(a[i]>'9'||a[i]<'0')
{
flag=1;
break;
}
sum*=10;
sum+=(ll)(a[i]-'0');
if(sum>1000000000)
{
flag=1;
break;
}
}
if(fu)
sum=-sum;
if(flag==1||sum<aa||sum>bb)
puts("NO");
else
puts("YES");
}
}