快速读入

· · 个人记录

快速读入

偶然 老师有所讲 故来分享一波

不先说先上个代码


  int qread()
 {
    int sign=1,x=0;//sign为符号,x为数
    char ch=getchar();
    while(ch<'0'||ch>'9') //只读入0-9之间的数字
    {
        if(ch=='-')           
            sign=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')//只读入0-9之间的数字
    {
        x=(x<<3)+(x<<1)+ch-48;
        ch=getchar();
    }
    return x*sign;
 }
``  虽说scanf会比cin快一丢丢但是总体来讲在一个题
    很多数据中还是会很慢
    故就用这个东东,
        if(ch=='-')           
            sign=-1;
    这里需要一个特判如果数是一个带有负号的先将 
    我们的sign转为-1,好进行最后的统计之中
        x=(x<<3)+(x<<1)+ch-48;
        ch=getchar();
    这里也可以写成x=x*10+ch-48;
    但是我们知道计算机进行数字运算的时候,会转成
    一个二进制代码如 101
    当这个数<<1的时候即为 1010 在后面填了一个0
    同理 101000  就是<<3  也就是*8
    再来一个<<1 即为 *10

    **但是要注意**
    这里 (x<<3)需要打括号 不然就会类在一起

#                 _~~感谢您的收听!!!~~_