快读快写是什么?怎么写?可以用来卡常吗?
Part 0:前言
突发奇想,来介绍快读快写。
希望大家喜欢!😉
Part 1:快读快写是什么?
因为getchar()
和putchar()
很快,所以我们可以利用这个把输入输出的速度提到很快。
Part 2:怎么写?
Part 2.1:快读
写法:
首先定义函数int read()
既然是读入整数,那么就要把多余的空格和负数考虑到:
int f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
然后边输入边加在一个变量上:
int s=0;
while(ch>='0'&&ch<='9'){
s=s*10+ch-'0';
ch=getchar();
}
这里还不够快,把s*10
改成位运算:(s<<1+s<<3)
。
最后输出(别忘把负数的情况考虑上):return s*f
。
完整代码:
int read(){
int s=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
s=(s<<1+s<<3)+ch-'0';
ch=getchar();
}
return s*f;
}
解析:
- 定义函数和变量。
while()
输入直到-
或数字,记录负数的情况。while()
边输入边累加。return
返回值。
Part 2.2:快写
递归写法,比较简单。
完整代码:
void write(int x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9)
write(x/10);
putchar(x%10+'0');
}
Part3:可以用来卡常吗?
可以。