【快读】基本思路及模板
先从C++自带的读入开始吧。
int n;
cin>>n;
这样的读入简单,但是速度不占优势,适合初学者(虽然我之前一直在用)
int n;
scanf("%d",&n);
这样的读入就比较快了,也较好理解,在题目不卡时间的情况下可以通过大部分题。
但是!一些毒瘤 题目为了卡你时间,你需要更快(咳咳)的读入方法来完成读入。
这里就涉及到getchar();
这个函数的作用的读入单个字符;
众所周知读入字符比读入数字要快一点(我也不知道为什么)
所以就可以挨个读入字符,然后转成十进制的数返回。
但是在这转化的过程中会涉及到一种新的运算(位运算)
这种运算也是毒瘤
这种运算很常见√
先贴上代码:
int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
这里要注意的是第十行;
x=(x<<1)+(x<<3)+(ch^48);
这里的<<x和>>x就是位运算操作。
位运算是对相应的二进制数生效的,>>x是把这个二进制数向右平移x位,挤出去的扔掉 ,<<x就是把这个二进制数向左平移x位,空位以0补齐就可以了。
例如:
原二进制数 10001 经过 << 2 后,变为 1000100
其效果:
x << 1 == x * 2;
x << 2 == x * 2 * 2;
x << 3 == x * 2 * 2 * 2;
………………
所以 (x<<1)+(x<<3) 可视为 x * 10;
后面的 (ch^48) 效果为 ch-= ‘0’;
但是getchar()只能读入单个字符,当然也包含空格,换行符,所以当读入有太多的空格及换行的时候,还是乖乖的用前面的方法吧。。。
ov.
个人博客地址: www.moyujiang.com 或 moyujiang.top
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 开发者新选择:用DeepSeek实现Cursor级智能编程的免费方案
· Tinyfox 发生重大改版
· 独立开发经验谈:如何通过 Docker 让潜在客户快速体验你的系统
· 小米CR6606,CR6608,CR6609 启用SSH和刷入OpenWRT 23.05.5
· 近期最值得关注的AI技术报告与Agent综述!