C++中的快读和快写
2024-08-24 05:14:56
快读原理
单个字符的读入速度要比读入数字快,因此我们以字符的形式先读入,然后处理计算转为数字。
代码
inline int read(){
register int x = 0, t = 1;
register char ch=getchar(); // 读入单个字符到寄存器
while(ch<'0'||ch>'9'){
if(ch=='-')
t=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48); // 移位与异或
// 第十行可以换成 x = x * 10 + ch - '0'
ch=getchar();
}
return x*t;
}
其中涉及到的移位运算、异或、inline、register
位运算、寄存器涉及计算机组成原理
第十行 x=(x<<1)+(x<<3)+(ch^48);
其中 << 为移位 ^ 为异或
移位
简单来说移位就是二进制数左移(<<) 或 右移(>>) x位 十进制看来就是乘/除2
其中 x << 1 == x * 2;
x << 3 == x * 2 * 2 * 2;
二者相加也就是 x * 10;
位或
就是数学里次方的符号 ^ 也是format中格式居中对齐的符号表示
简单说就是 "同0 异1" 相同的两个数异或为0 不同的异或为1
ch^48
相当于 ch -= '0'
inline
简单来说就是类似 #define 但是能更进一步的定义函数 能够提升效率
register
意思是将变量放入寄存器,大幅提升效率
注意 : 读入中包含大量无用空格时 快读不太适用
附 快写代码
inline void write(int x)
{
if(x<0){
putchar('-');
x=-x;
}
if(x>9)
write(x/10);
putchar(x%10+'0');
}
最新文章
- YII2.0 Activeform表单组件的使用方法
- 点击document隐藏某个div
- usb驱动开发17之设备生命线
- 正向代理与反向代理的区别【Nginx读书笔记】
- 洛谷 P1541 乌龟棋 Label:O(n^4)的dp
- 源码安装apache
- android重要的对象
- 在无人值守程序(服务)中调用Microsoft Graph
- TensorFlow实现XOR
- python编程实战
- java中的线程中断
- 业务开发(二)—— Spring框架
- Codeforces Round #540 Tanya and Candies 预处理
- poj 2777线段树应用
- Chapter 6 面向对象基础
- EXP-00032: Non-DBAs may not export other users
- Javacript实现倒计时
- php对数组操作的函数
- dp好题 玲珑杯 Expected value of the expression
- Java虚拟机内存详解
热门文章
- 7.11 NOI模拟赛 graph 生成函数 dp 多项式
- 4.9 省选模拟赛 圆圈游戏 树形dp set优化建图
- MyBatis-Plus使用(1)-概述+代码生成器
- /usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint naughty_wozniak (444e26e0a2a3adb1ff88177ead86099ad64c0406afcec179ce7cfeef8ffa2d5c): (i
- “随手记”开发记录day12
- Java不可不知的泛型使用
- mongodb 4.0副本集搭建
- 智能问答中的NLU意图识别流程梳理
- C#LeetCode刷题-堆
- 深度强化学习:Deep Q-Learning