在C++中,由于getchar函数要比scanf快,所以这个int快读的效率要比scanf高。
int类型数据快读程序如下:
inline int read()
{
register int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9') {
x=(x<<3)+(x<<1)+(c^48); //等价于x*10+c-48,使用位运算加速
c=getchar();
}
return x*f;
}
代码解释:
- inline是C++关键字,在函数声明或定义中,函数返回类型前加上关键字inline,即可以把函数指定为内联函数。这样可以解决一些频繁调用的函数大量消耗栈空间(栈内存)的问题。
- register修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度。
- 采用位运算的方式代替
x*10+c-48
加快运行的速度。