快读与快写的实现
Posted flowyuan-foreverworld
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快读与快写的实现相关的知识,希望对你有一定的参考价值。
快读与快写
< 快读 >
- 为什么要用快读?
虽然scanf的读入速度比cin快,不过当我们遇到一些特别恶心的题目,哪怕用了sanf仍然会超时,而这时候就需要用上快读了。 - 快读的大体思路:
众所周知(反正我不知道),单个字符的读入速度要比读入数字的速度快,所以我们用 getchar() 以字符形式先读入字符,再将其化为数字来处理。
快读本体我们用一个函数来实现,因为体量较小,可以在前面加上 inline 来进一步节省时间。
实现代码如下:
inline int read()
{
int x=0,falg=0;
char c=getchar(); //读入第一个字符
while (c>‘9‘||c<‘0‘){if (c==‘-‘) falg=1;c=getchar();} //读入空格直接跳过,读入‘-‘标记flag为1。
while (c<=‘9‘&&c>=‘0‘){x=x*10+c-‘0‘;c=getchar();} //用循环逐步得到要读入的数字
return falg?-x:x;
}
其实还是蛮简单的,自己也暴力测试过速度(在洛谷受苦),居然会比 cin 和printf 快,还是有些不可思议的,,,
< 快写 >
快写就更简单了,把整数 x 每一个 位上的数 逐一拆成字符输出即可,用的是 putchar() 。
代码如下
inline void write(int x)
{
if(x<0)
{
putchar(‘-‘);
x=-x;
}
if(x>9)
write(x/10);
putchar(x%10+‘0‘);
}
没了。
学习自:呐呐~
以上是关于快读与快写的实现的主要内容,如果未能解决你的问题,请参考以下文章