我觉得我有必要保存一个整数快读的代码

版权声明:有女朋友的老江的博客,转载请告知老江 https://blog.csdn.net/qq_42367531/article/details/83444026

快读是一个很鬼畜的东西

还好普及组没有那个垃圾玩意,听说提高组会因为这个垃圾玩意折腾很久

就顺带解释一下吧,感觉网上的有点简单

像我这种蒟蒻,代码的每一句都是要解释出来的

想我这个蒟蒻只会整数的快读,就先解释整数的

啊,感觉我好啰嗦啊,但是我还是要啰嗦一样思路再放代码

思路:就是把字符转化成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了

猜你喜欢

转载自blog.csdn.net/qq_42367531/article/details/83444026
今日推荐