快速读入
快速读入
偶然 老师有所讲 故来分享一波
不先说先上个代码
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)需要打括号 不然就会类在一起
# _~~感谢您的收听!!!~~_