【C++】快速读入

快速读入,简称快读,比cin()、printf()等都快

void类型的快读

#include <cctype>
//isdigit()在<cctype>头文件中,用于判断字符是否为阿拉伯数字(0-9).
inline void read(int &x){
	x=0; 
	char c=0; 
	int w=0;  
	while (!isdigit(c)) w|=c=='-',c=getchar();  
	while (isdigit(c)) x=x*10+(c^48),c=getchar();  
	if(w) x=-x;  
}

int main() {
	read(a);
	read(b);
	return 0;
}

int类型的快读

#include <cctype>

inline int read(){
	int s=0,w=1;
	char c=getchar();
	while(!isdigit(c)) w|=c=='-',c=getchar();
	while(isdigit(c)) s=s*10+(c^48),c=getchar();
	return s*w;
}

int main() {
	int n=read();
	int m=read();
	return 0;
}

int类型的快读(易懂)

inline int read(){
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0' || ch>'9') {
		if(ch=='-') w=-1;
		ch=getchar();
	}
	while(ch>='0' && ch<='9') {
		s=s*10+ch-'0';
		ch=getchar();
	}
	return s*w;
}

int main() {
	int n=read();
	int m=read();
	return 0;
}

fread快读(超快)

inline char nc(){
    static char buf[100000],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2) ? EOF:*p1++;
}

inline int read(){
    char ch=nc();
    int s=0;
    while(ch<'0' || ch>'9') ch=nc();
    while(ch>='0' && ch<='9') s=s*10+(ch^48),ch=nc();
    return s;
}

int main() {
	int n=read();
	int m=read();
	return 0;
}

注意:使用fread快读后,getchar()、scanf()等都不能用了,它们都存入buf里了。所以不是特殊情况不要使用fread快读。

发布了48 篇原创文章 · 获赞 57 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Ljnoit/article/details/104161565