快读是一个很鬼畜的东西
还好普及组没有那个垃圾玩意,听说提高组会因为这个垃圾玩意折腾很久
就顺带解释一下吧,感觉网上的有点简单
像我这种蒟蒻,代码的每一句都是要解释出来的
想我这个蒟蒻只会整数的快读,就先解释整数的
啊,感觉我好啰嗦啊,但是我还是要啰嗦一样思路再放代码
思路:就是把字符转化成ASCII码,因为ASCII码在电脑里面可以判断的快一点,还有一个就是要判断当前的这个字符ASCII码是不是整数,如果不是就直接跳过(不过每一种东西都会有专属的快读),如果是的话,还有判断正负星。输入的时候是从高位到低位输入的
【代码】
inline int read()
//这个是快读,不太影响但是背一下也是不错的
//输入整数的时候会快一点,尤其是很大的数的时候
{
char c=getchar();//这个可以理解为转化成了ASCII码
//getchar就是比cin和scanf都要快的输入 //putchar就是最快的输出
int x=0,f=1;//x表示的是位数 //f表示的是正负性
while(c<48 || c>57)//如果比0小或者比9大,说明不是数字
{
if(c=='-') f=-1;//如果前面有负号,就先输出负号
c=getchar();//这个就是输入
//然后也是一直判断
}
while(c>=48 && c<=57)//如果大于等于0并且小于等于9,说明是数字
{
x=x*10+c-48;
/*
这个就是按位输入,比直接输入要快很多
然后的话就是因为我们把数字转化成了ASCII码,然后如果减去'0'的ASCII码
就是我们要的数字(注意这个是要输入的数字,而不是要输入数字的ASCII码)
(还有一个就是:这个是从高位开始输入的)
举个例子:我要输入4
那么首先4的ASCII码为52,然后当前的x=0,c=52(4的ASCII码)
然后 x*10+c-48=4,刚好等于4,又因为不是负的,所以f=1
所以x*f=4,这个就是我们要输入的
再比如:21
2的ASILL码是50,然后x*10+c-48=2我们就输入了2;
然后因为1也保存在了getchar里面,所以就继续输入1
和上面的步骤是一样的
*/
c=getchar();//输入
//然后一直循环判断,输入完一位在输入下一位
//达到快速的按位输入
}
return x*f;//x就是输入的数字,可以是单位或多位,f就是来定正负的
}
以上是快读的函数
还有就是快读的输入方法,(感觉自己像一个姑婆一样在这啰嗦)
我就以一个a+b最简单的威力子吧
int main()
{
int a,b;
a=read(); b=read();
printf("%d\n",a+b);
return 0;
}
加上头文件,和 using namespace std; 还有最重要的快读,就okk了