C++快速输入

借鉴大牛的博客:https://blog.csdn.net/qq_34287501/article/details/70232038

cin 没有 scanf 快,那么还有比 scanf还快的输入吗?那就是getchar(),它比scanf快多了,输入挂就是根据它写的,具体代码(代码是看大牛的)如下:

整数:


[cpp]  view plain  copy
  1. inline bool scan_d(int &num)    
  2. {  
  3.         char in;bool IsN=false;  
  4.         in=getchar();  
  5.         if(in==EOF) return false;  
  6.         while(in!='-'&&(in<'0'||in>'9')) in=getchar();  
  7.         if(in=='-'){ IsN=true;num=0;}  
  8.         else num=in-'0';  
  9.         while(in=getchar(),in>='0'&&in<='9'){  
  10.                 num*=10,num+=in-'0';  
  11.         }  
  12.         if(IsN) num=-num;  
  13.         return true;  
  14. }  

浮点数:

[cpp]  view plain  copy
  1. inline bool scan_lf(double &num)    
  2. {  
  3.         char in;double Dec=0.1;  
  4.         bool IsN=false,IsD=false;  
  5.         in=getchar();  
  6.         if(in==EOF) return false;  
  7.         while(in!='-'&&in!='.'&&(in<'0'||in>'9'))  
  8.                 in=getchar();  
  9.         if(in=='-'){IsN=true;num=0;}  
  10.         else if(in=='.'){IsD=true;num=0;}  
  11.         else num=in-'0';  
  12.         if(!IsD){  
  13.                 while(in=getchar(),in>='0'&&in<='9'){  
  14.                         num*=10;num+=in-'0';}  
  15.         }  
  16.         if(in!='.'){  
  17.                 if(IsN) num=-num;  
  18.                 return true;  
  19.         }else{  
  20.                 while(in=getchar(),in>='0'&&in<='9'){  
  21.                         num+=Dec*(in-'0');Dec*=0.1;  
  22.                 }  
  23.         }  
  24.         if(IsN) num=-num;  
  25.         return true;  
  26. }  


强烈输入挂(直接交,看结果需要用文件):

[cpp]  view plain  copy
  1. #define FI(n) FastIO::read(n)  
  2.   
  3. namespace FastIO {  
  4.     const int SIZE = 1 << 16;  
  5.     char buf[SIZE], obuf[SIZE], str[60];  
  6.     int bi = SIZE, bn = SIZE, opt;  
  7.     int read(char *s) {  
  8.         while (bn) {  
  9.             for (; bi < bn && buf[bi] <= ' '; bi++);  
  10.             if (bi < bn) break;  
  11.             bn = fread(buf, 1, SIZE, stdin);  
  12.             bi = 0;  
  13.         }  
  14.         int sn = 0;  
  15.         while (bn) {  
  16.             for (; bi < bn && buf[bi] > ' '; bi++) s[sn++] = buf[bi];  
  17.             if (bi < bn) break;  
  18.             bn = fread(buf, 1, SIZE, stdin);  
  19.             bi = 0;  
  20.         }  
  21.         s[sn] = 0;  
  22.         return sn;  
  23.     }  
  24.     bool read(int& x) {  
  25.         int n = read(str), bf;  
  26.   
  27.         if (!n) return 0;  
  28.         int i = 0; if (str[i] == '-') bf = -1, i++; else bf = 1;  
  29.         for (x = 0; i < n; i++) x = x * 10 + str[i] - '0';  
  30.         if (bf < 0) x = -x;  
  31.         return 1;  
  32.     }  
  33. };  

猜你喜欢

转载自blog.csdn.net/soul778888/article/details/80427801