502 字
3 分钟
C++ 快读快写模板
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;}例题
#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;}