【C++快读快输详解(快速读⼊数字,快速输出数字)】
  当我们还是个⼩蒟蒻的时候,(为了简单易懂)都会选择下⾯的读⼊⽅式
int a;
cin>>a;
  这个读⼊简单⽅便,但到后⾯,⼩蒟蒻成长了(变成了⼤蒟蒻)读的东西多了,读的也就显得慢些,所以有了下⾯的⽅式
int a;
scanf("%d",&a);
  这样虽然快了,能通过⼤部分题了。
  但是有⼀些题还是会卡常,于是快读出现了。(感觉很腻害的样⼦)
1 inline int read(){
2int x=0,f=1;
3char ch=getchar();
4while(ch<'0'||ch>'9'){
5if(ch=='-')
6            f=-1;
7        ch=getchar();
8    }
9while(ch>='0'&&ch<='9'){
10        x=(x<<1)+(x<<3)+(ch^48);
11        ch=getchar();
12    }
13return x*f;
14 }
  其实也没有什么难的,只是通过读⼊字符⽽后来转成数字,⽽原理就是读⼊字符⽐数字快(不要问我为什么)
x=(x<<1)+(x<<3)+(ch^48);
  重点是第⼗⾏:x=(x<<1)+(x<<3)+(ch^48);
  " << " 操作为⼆进制操作中的位移操作,原理是将原⼆进制数向左平移 x 位,右边原位置以 0 补齐(当然也有向右移的">>",但是这⾥不⽤)  例如:
  原⼆进制数 10001  经过 << 2 后,变为 1000100
  其效果: x << 1 == x * 2;
      x << 2 == x * 2 * 2;
      ………………
  所以 (x<<1)+(x<<3) ==x*2+x*2*2*2=x*10;
  后⾯的 (ch^48) 效果为 ch - = '0';
  getchar() 为读⼊单个字符(包括空格,换⾏符)
  ⽽当读⼊数据中有⼤量空格时,就不要⽤快读了。(你想⽤的话也不是不可以)
  我们再来看到输出环节
  ⼀般简单⽅便使⽤的下⾯的⽅法
int a=0;
cout<<a;
  到后来,进阶了,⽤了下⾯的⽅法
int a=0;
printf("%d",a);
然⽽还是有些毒瘤题⽬会卡,我们就结合快读来了⼀发快写
1 inline void write(int x)
2{
3char F[200];
4int tmp=x>0?x:-x ;
5if(x<0)putchar('-') ;
6int cnt=0 ;
7while(tmp>0)
8      {
9            F[cnt++]=tmp%10+'0';
10            tmp/=10;
11      }
12while(cnt>0)putchar(F[--cnt]) ;
printf直接输出数字13 }
  这个代码中,我们⽤⼀个char数组存储,
  putchar是单个字符的输出⽅式
  相信有了这套快读快写,你以后的代码会⼤⼤减少时间!
  可以学习clock()函数来计算⼀下代码优化程度。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。