502 字
3 分钟
C++ 快读快写模板
2021-02-08
无标签

UpDate 2021/7/19:#

感谢 @Eason_AC 的指点,快读、快写将可以支持任意整型变量的输入与输出。

正文#

由于快读和快写需要用到 <cstdio> 头文件中的 getchar()putchar() 函数,所以在代码的开头请加入如下代码:

#include <cstdio>

函数支持变量类型多样,请在调用 read() 函数时在 read() 之间加入 <您要读入的变量类型>。 例:int a = read<int>();

快读:

template<typename T> inline T read() {
T X = 0; bool flag = 1; char ch = getchar();
while (ch < '0' || ch > '9') {if (ch == '-') flag = 0; ch = getchar();}
while (ch >= '0' && ch <= '9') {X = (X << 1) + (X << 3) + ch - '0'; ch = getchar();}
if (flag) return X;
return ~ (X - 1);
}

快写:

template<typename T> inline void write(T X) {
if (X < 0) {putchar('-'); X = ~ (X - 1);}
int s[50], top = 0;
while (X) {s[++top] = X % 10; X /= 10;}
if (!top) s[++top] = 0;
while (top) putchar(s[top--] + '0');
putchar('\n');//根据情况自行修改
return;
}

一键复制快读快写:

template<typename T> inline T read() {
T X = 0; bool flag = 1; char ch = getchar();
while (ch < '0' || ch > '9') {if (ch == '-') flag = 0; ch = getchar();}
while (ch >= '0' && ch <= '9') {X = (X << 1) + (X << 3) + ch - '0'; ch = getchar();}
if (flag) return X;
return ~ (X - 1);
}
template<typename T> inline void write(T X) {
if (X < 0) {putchar('-'); X = ~ (X - 1);}
int s[50], top = 0;
while (X) {s[++top] = X % 10; X /= 10;}
if (!top) s[++top] = 0;
while (top) putchar(s[top--] + '0');
putchar('\n');
return;
}

例题#

A + B Problem

#include <cstdio>
template<typename T> inline T read() {
T X = 0; bool flag = 1; char ch = getchar();
while (ch < '0' || ch > '9') {if (ch == '-') flag = 0; ch = getchar();}
while (ch >= '0' && ch <= '9') {X = (X << 1) + (X << 3) + ch - '0'; ch = getchar();}
if (flag) return X;
return ~ (X - 1);
}
template<typename T> inline void write(T X) {
if (X < 0) {putchar('-'); X = ~ (X - 1);}
int s[50], top = 0;
while (X) {s[++top] = X % 10; X /= 10;}
if (!top) s[++top] = 0;
while (top) putchar(s[top--] + '0');
putchar('\n');
return;
}
int main() {
int a, b;
a = read<int>(), b = read<int>();
write(a + b);
return 0;
}
C++ 快读快写模板
https://xn--24wq0n.top/posts/2021-02-08-c_快读快写模板/
作者
淼畔
发布于
2021-02-08
许可协议
CC BY-NC-SA 4.0