题解 P5238 【整数校验器】

皎月半洒花

2019-03-02 19:20:11

Solution

我赌我代码绝对是C++里面最短的——之一…… 其实很简单,就是个比较。于是我们就可以用$long~double$,毕竟$long~double$的值域高达$10^{1050+}$…… ```cpp 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$左右,超过长度可以直接判掉。