快速读入/快速输出------NOI赛场上必备神器
1.为啥要使用快读/快输
在c++的iostream库中提供了cin和cout的标准流输入输出,方便确实是方便,就是有点小卡小卡的,啷个回事嘞,原来cin,cout都是先把数据存入输入输出流中,等读取数据结束再一起输出,可是我们完全可以直接输入输出,就没必要再存入io流中了。通常情况下,我们会选择使用cstdio里的printf和scanf来进行扫描,这种方式便于控制格式,但对于较多,较大的数据来说,仍然不够优秀,于是,考虑到对于字符的读取最快,快读与快输就诞生了(手动鼓掌
)
2.没啥好说的,直接上代码
int Read()
{
int num=0,k=1; //k是正负数标记
char c=getchar();
while(c!='-'&&(c<'0'||c>'9')) c=getchar();//注意判断'-'
if(c=='-')
{
k=-1;
c=getchar();
}
while(c>='0'&&c<='9')
{
num=(num<<3)+(num<<1)+(c^48);//num<<3相当于num*8,num<<1相当于num*2,
c=getchar(); //c^48利用位运算优化,相当于c-'0' ,但是一定要加括号
return num*k;
}
void print(int x)
{
if(x>9) print(x/10); //把这个数一位一位的输出
putchar(x%10+'0');
}