读入读出挂!!

Posted liubilan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读入读出挂!!相关的知识,希望对你有一定的参考价值。

说起读入读出挂,体内洪荒之力呼啸飞过,输入输出规模超过 10e6 就可以用啦;

 

参考博客:https://blog.csdn.net/f_zyj/article/details/51473493

 

适用于正整数

 1 template <class T>
 2 inline void scan_d(T &ret) 
 3 {
 4     char c; 
 5     ret = 0;
 6     while ((c = getchar()) < 0 || c > 9);
 7     while (c >= 0 && c <= 9)
 8     { 
 9         ret = ret * 10 + (c - 0), c = getchar();
10     }
11 }

 

适用于正负整数

 1 template <class T>
 2 inline bool scan_d(T &ret) 
 3 {
 4     char c; 
 5     int sgn;
 6     if (c = getchar(), c == EOF) 
 7     {
 8         return 0; //EOF 
 9     }
10     while (c != - && (c < 0 || c > 9)) 
11     {
12         c = getchar(); 
13     }
14     sgn = (c == -) ? -1 : 1;
15     ret = (c == -) ? 0 : (c - 0); 
16     while (c = getchar(), c >= 0 && c <= 9) 
17     {
18         ret = ret * 10 + (c - 0); 
19     }
20     ret *= sgn;
21     return 1;
22 }
23 
24 template <class T>
25 inline void print_d(T x) 
26 { 
27     if (x > 9) 
28     {
29         print_d(x / 10); 
30     }
31     putchar(x % 10 + 0);
32 }

 

仅适合纯数字输入输出

 1 int Scan()
 2 {   //  输入外挂  
 3     int res = 0, flag = 0;  
 4     char ch;  
 5     if ((ch = getchar()) == -) 
 6     {   
 7         flag = 1;  
 8     }    
 9     else if(ch >= 0 && ch <= 9) 
10     {
11         res = ch - 0; 
12     }
13     while ((ch = getchar()) >= 0 && ch <= 9)  
14     {
15         res = res * 10 + (ch - 0);  
16     }
17     return flag ? -res : res;  
18 }  
19 
20 void Out(int a) 
21 {   //  输出外挂  
22     if (a < 0) 
23     {
24         putchar(-);
25         a = -a;
26     }  
27     if (a >= 10)
28     {
29        Out(a / 10);  
30     }
31     putchar(a % 10 + 0);  
32 }  
33 
34 int main() 
35 {  
36     int T, n;  
37     scanf ("%d", &T);  
38     while (T--) 
39     {  
40         n = Scan();  
41         Out(n);  
42         printf("
");  
43     }  
44     return 0;  
45 }

 

适用于正负数(int,long long,float,double)

 1 template <class T>
 2 bool scan_d(T &ret)
 3 {
 4     char c; 
 5     int sgn; 
 6     T bit = 0.1;
 7     if (c=getchar(), c==EOF) 
 8     {
 9         return 0;
10     }
11     while (c! = - && c != . && (c < 0 || c > 9)) 
12     {
13         c = getchar();
14     }
15     sgn = (c == -) ? -1 : 1;
16     ret = (c == -) ? 0 : (c - 0);
17     while (c = getchar(), c >= 0 && c <= 9)
18     {
19         ret = ret * 10 + (c - 0);
20     }
21     if (c ==   || c == 
)
22     {
23         ret *= sgn;
24         return 1;
25     }
26     while (c = getchar(), c >= 0 && c <= 9)
27     {
28         ret += (c - 0) * bit, bit /= 10;
29     }
30     ret *= sgn;
31     return 1;
32 }
33 
34 template <class T>
35 inline void print_d(int x)
36 {
37     if (x > 9)
38     {
39         print_d(x / 10);
40     }
41     putchar(x % 10 + 0);
42 }

 

套装

 1 char buf[MAXIN], *ps = buf, *pe = buf + 1;
 2 
 3 inline void rnext()
 4 {
 5     if (++ps == pe)
 6     {
 7         pe = (ps = buf) + fread(buf, sizeof(char), sizeof(buf) / sizeof(char), stdin);
 8     }
 9     return ;
10 }
11 
12 template <class T>
13 inline bool in(T &ans)
14 {
15     ans = 0;
16     T f = 1;
17     if (ps == pe)
18     {
19         return false;
20     }
21     do
22     {
23         rnext();
24         if (- == *ps)
25         {
26             f = -1;
27         }
28     } while (!isdigit(*ps) && ps != pe);
29     if (ps == pe)
30     {
31         return false;
32     }
33     do
34     {
35         ans = (ans << 1) + (ans << 3) + *ps - 48;
36         rnext();
37     } while (isdigit(*ps) && ps != pe);
38     ans *= f;
39     return true;
40 }
41 
42 char bufout[MAXOUT], outtmp[50], *pout = bufout, *pend = bufout + MAXOUT;
43 
44 inline void write()
45 {
46     fwrite(bufout, sizeof(char), pout - bufout, stdout);
47     pout = bufout;
48     return ;
49 }
50 
51 inline void out_char(char c)
52 {
53     *(pout++) = c;
54     if (pout == pend)
55     {
56         write();
57     }
58     return ;
59 }
60 
61 inline void out_str(char *s)
62 {
63     while (*s)
64     {
65         *(pout++) = *(s++);
66         if (pout == pend)
67         {
68             write();
69         }
70     }
71     return ;
72 }
73 
74 template <class T>
75 inline void out_int(T x)
76 {
77     if (!x)
78     {
79         out_char(0);
80         return ;
81     }
82     if (x < 0)
83     {
84         x = -x, out_char(-);
85     }
86     int len = 0;
87     while (x)
88     {
89         outtmp[len++] = x % 10 + 48;
90         x /= 10;
91     }
92     outtmp[len] = 0;
93     for (int i = 0, j = len - 1; i < j; i++, j--)
94     {
95         swap(outtmp[i], outtmp[j]);
96     }
97     out_str(outtmp);
98     return ;
99 }

 

更加高效的输入输出外挂

 1 struct FastIO
 2 {
 3     static const int S = 100 << 1;
 4 
 5     int wpos;
 6     char wbuf[S];
 7 
 8     FastIO() : wpos(0) {}
 9 
10     inline int xchar()
11     {
12         static char buf[S];
13         static int len = 0, pos = 0;
14 
15         if (pos == len)
16         {
17             pos = 0;
18             len = (int)fread(buf, 1, S, stdin);
19         }
20         if (pos == len)
21         {
22             return -1;
23         }
24 
25         return buf[pos++];
26     }
27 
28     inline int xint()
29     {
30         int s = 1, c = xchar(), x = 0;
31         while (c <= 32)
32         {
33             c = xchar();
34         }
35         if (c == -)
36         {
37             s = -1;
38             c = xchar();
39         }
40         for (; 0 <= c && c <= 9; c = xchar())
41         {
42             x = x * 10 + c - 0;
43         }
44 
45         return x * s;
46     }
47 
48     ~FastIO()
49     {
50         if (wpos)
51         {
52             fwrite(wbuf, 1, wpos, stdout);
53             wpos = 0;
54         }
55     }
56 } io;

 

以上是关于读入读出挂!!的主要内容,如果未能解决你的问题,请参考以下文章

python 以文档形式读入读出

神奇的读入读出

[黑科技]市面上不太常见的cin挂和cout挂

R语言︱文件读入读出一些方法罗列(批量xlsx文件数据库文本txt文件夹)

R语言︱文件读入读出一些方法罗列(批量xlsx文件数据库文本txt文件夹)

fread读入挂and普通读入挂and浮点数读入挂