快速读写的处理
原理
众所周知,在c++中,用putchar和getchar输入输出字符的速度是很快的,因此,我们可以考虑把数字转化为字符,按位输出;把字符读入后转化为数字的每一位。
1.关闭同步流
ios :: sync_with_stdin(false);
cin.tie(NULL);
cout.tie(NULL);
把endl转化为"\n"。
2.scanf()与printf()函数的使用
3.快读快写函数
int read()
{
int x = 0, w = 1;
char ch = 0;
while (ch < '0' || ch > '9') // ch 不是数字时
{
if (ch == '-') w = -1; // 判断是否为负
ch = getchar(); // 继续读入
}
while (ch >= '0' && ch <= '9') // ch 是数字时
{
x = x * 10 + (ch - '0'); // 将新读入的数字’加’在 x 的后面
// x 是 int 类型,char 类型的 ch 和 ’0’ 会被自动转为其对应的
// ASCII 码,相当于将 ch 转化为对应数字
// 此处也可以使用 (x<<3)+(x<<1) 的写法来代替 x*10
ch = getchar(); // 继续读入
}
return x * w; // 数字 * 正负号 = 实际数值
}
void write(int x)
{
if (x < 0) // 判负 + 输出负号 + 变原数为正数
{
x = -x;
putchar('-');
}
if (x > 9) write(x / 10); // 递归,将除最后一位外的其他部分放到递归中输出
putchar(x % 10 + '0'); // 已经输出(递归)完 x 末位前的所有数字,输出末位
}
但是栈使用时间有点大,我们可以手写一个栈来解决。
inline void write(int x)
{
static int sta[35];
int top = 0;
do
{
sta[top++] = x % 10,
x /= 10;
} while (x);
while (top) putchar(sta[--top] + 48); // 48 是 '0'
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】