快读 与 快写
今天是我在博客园的第一天,很想写篇文章!!!
能分享点什么呢?
1分钟过去了……
5分钟过去了……
15分钟过去了……
有了!就分享一下快读与快写吧!
1.实现目的
C++的cin与cout,由于要考虑多种类型,效率较低。
大部分比赛里的输入输出都是整数,能不能自己写一个read和write,让输入与输出的速度变快?
2.函数原型与使用方式
int read();
void write(int);
int num = read();
write(num);
3.实现方式
经“调查”,博主发现有两个函数:getchar()与putchar(),用于单个字符的输入输出。
read函数可以使用getchar()一位一位读入数字。
write函数可以使用putchar()一位一位输出数字。
4.代码
1 #includeRead Write Function2 using namespace std; 3 4 int read() { 5 int res = 0; 6 int flag = 0; 7 char c = getchar(); // 判断符号 8 if (c == '-') { // 负数 9 flag = 1; 10 c = '0'; 11 } 12 while (c >= '0' && c <= '9') { 13 res *= 10; // 腾出位置 14 res += (c - '0'); // 把新数字“戴上” 15 c = getchar(); 16 } 17 return (flag == 1 ? -res : res); 18 } 19 20 void write(int num) { 21 if (num == 0) { // 特殊情况 22 putchar('0'); 23 return; 24 } 25 if (num < 0) { // 负数 26 putchar('-'); 27 num = -num; 28 } 29 int arr[10]; 30 int cnt = -1; 31 while (num) { 32 arr[++cnt] = num % 10; // 顺次压入栈,实现递归 33 num /= 10; // 下一位 34 } 35 while (cnt > -1) { // 还得考虑第一位! 36 putchar('0' + arr[cnt--]); 37 } 38 return; 39 } 40 41 int main() { 42 int a = read(); 43 int b = read(); 44 write(a); putchar(' '); 45 write(b); putchar('\n'); 46 return 0; 47 }
P.S. 此代码也可以作为模板使用!如要读入long long型整数,请稍微改一下代码!