我赌我代码绝对是C++里面最短的——之一……
其实很简单,就是个比较。于是我们就可以用$long~double$,毕竟$long~double$的值域高达$10^{1050+}$……
int main(){
cin >> L >> R >> T ;
while(T --){
scanf("%s", In), Len = strlen(In) ;
if ((In[0] == '-' && In[1] == '0') || (In[0] == '0' && Len > 1) || (Len == 1 && In[0] == '-')) puts("1") ;
else if (Len > 30) puts("2") ;
else {
long double N = 0 ;
if (In[0] == '-'){
for (i = 1 ; i < Len ; ++ i) N = N * 10 + (In[i] - '0') ;
N *= -1.0 ;
}
else
for (i = 0 ; i < Len ; ++ i) N = N * 10 + (In[i] - '0') ;
if (N >= L && N <= R) puts("0") ; else puts("2") ;
}
}
return 0 ;
}
然后因为$2^{64}$大概在$1e19$左右,超过长度可以直接判掉。