笨蛋花的小窝qwq

笨蛋花的小窝qwq

“我要再和生活死磕几年。要么我就毁灭,要么我就注定铸就辉煌。如果有一天,你发现我在平庸面前低了头,请向我开炮。”

题解 P5238 【整数校验器】

posted on 2019-03-02 19:20:11 | under 题解 |

我赌我代码绝对是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$左右,超过长度可以直接判掉。