呃啊。。。。这也是醉了。。
题意很简单 就是给一行字符串 给两个整数 判断字符串所表示的数字在不在两个整数之间
字符串里面有一些非法字符 还有一些非法的表达方式 比如前导0
直接简单模拟就可以的。。。因为两个整数是有范围的 在int范围之内 所以可以通过字符串的长度进行判断
一开始我在写的时候 没注意到会出现空格的情况 用的scanf读取 WA了之后发现不对 用gets读取
然后还是始终不对 各个特殊情况都考虑到了。。
再我准备再重新写的时候 把读取两个整数之后的\n删了 在之后加上getchar()之后 提交 过了!!
尼玛啊。。简直瞎了 以后再也不要这么写了。。。。
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string.h>
#include <string>
#define eps 1e-8
#define op operator
#define MOD 10009
#define MAXN 100100
#define INF 0x7fffffff
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define FOV(i,a,b) for(int i=a;i>=b;i--)
#define REP(i,a,b) for(int i=a;i<b;i++)
#define REV(i,a,b) for(int i=a-1;i>=b;i--)
#define MEM(a,x) memset(a,x,sizeof a)
#define ll __int64
using namespace std;
char s[200];
int main()
{
//freopen("ceshi.txt","r",stdin);
while(gets(s))
{
// cout<<s<<endl;
ll a,b;
scanf("%I64d %I64d",&a,&b);
getchar();
int len=strlen(s);
if(len>11||len==0)
{
puts("NO");
continue;
}
int flag=1;
for(int i=0;i<len&&flag;i++)
{
if(i==0&&s[0]=='-')
continue;
if(s[i]<'0'||s[i]>'9')
{
flag=0;
break;
}
}
if(flag==0)
{
puts("NO");
continue;
}
ll c=0;
ll time=1;
if(s[0]=='-')
{
if(s[1]=='0')
{
puts("NO");
continue;
}
else
{
if(len==1)
{
puts("NO");
continue;
}
else
{
for(int i=len-1;i>=1;i--)
{
c+=(s[i]-'0')*time;
time*=10;
}
c*=-1;
// cout<<c<<endl;
if(c>=a&&c<=b)
{
puts("YES");
continue;
}
else
{
puts("NO");
continue;
}
}
}
}
else
{
if(s[0]=='0'&&len>1)
{
puts("NO");
continue;
}
else
{
for(int i=len-1; i>=0; i--)
{
c+=(s[i]-'0')*time;
time*=10;
}
// cout<<c<<endl;
if(c>=a&&c<=b)
{
puts("YES");
continue;
}
else
{
puts("NO");
continue;
}
}
}
}
return 0;
}