日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

【C++快读快输详解(快速读入数字,快速输出数字)】

發(fā)布時(shí)間:2025/7/25 128 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++快读快输详解(快速读入数字,快速输出数字)】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  眾所周知,C++自帶讀入(廢話),如

int a; cin>>a;

  這個(gè)讀入簡單方便,但到后面,讀的東西多了,讀的也就顯得慢些,所以有了下面的方式

int a; scanf("%d",&a);

  這樣雖然快了,能通過大部分題了。

  但是有一些毒瘤題還是會(huì)卡時(shí)間,于是快讀出現(xiàn)了。

1 inline int read(){ 2 int x=0,f=1; 3 char ch=getchar(); 4 while(ch<'0'||ch>'9'){ 5 if(ch=='-') 6 f=-1; 7 ch=getchar(); 8 } 9 while(ch>='0'&&ch<='9'){ 10 x=(x<<1)+(x<<3)+(ch^48); 11 ch=getchar(); 12 } 13 return x*f; 14 }

?

  其實(shí)也沒有什么難的,只是通過讀入字符而后來轉(zhuǎn)成數(shù)字,而原理就是讀入字符比數(shù)字快(不要問我為什么)

?

x=(x<<1)+(x<<3)+(ch^48);

  重點(diǎn)是第十行:x=(x<<1)+(x<<3)+(ch^48);

  " << x" 操作為二進(jìn)制操作,原理是將原二進(jìn)制數(shù)向左平移 x 位,右邊原位置以 0 補(bǔ)齊

  例如:

?  原二進(jìn)制數(shù) 10001? ?經(jīng)過 << 2 后,變?yōu)?1000100?

?  其效果: x << 1 == x * 2;

    ? x << 2 == x * 2 * 2;

    ? ………………

  所以 (x<<1)+(x<<3) 可視為 x * 10;

  后面的 (ch^48) 效果為 ch - = '0';

  getchar() 為讀入單個(gè)字符(包括空格 ,換行符)

  而當(dāng)讀入數(shù)據(jù)中有大量空格時(shí),就不要用快讀了。

  我們再來看到輸出環(huán)節(jié)

  一般簡單方便使用的下面的方法

  

int a=0; cout<<a;

?

  到后來,不再是小蒟蒻,用了下面的方法

int a=0; printf("%d",a);

然而還是有些毒瘤題目會(huì)卡,我們就結(jié)合快讀來了一發(fā)快寫

1 inline void write(int x) 2 { 3 char F[200]; 4 int tmp=x>0?x:-x ; 5 if(x<0)putchar('-') ; 6 int cnt=0 ; 7 while(tmp>0) 8 { 9 F[cnt++]=tmp%10+'0'; 10 tmp/=10; 11 } 12 while(cnt>0)putchar(F[--cnt]) ; 13 }

  這個(gè)代碼中,我們用一個(gè)char數(shù)組存儲(chǔ),

  putchar是單個(gè)字符的輸出方式

  相信有了這套快讀快寫,你以后的代碼會(huì)大大減少時(shí)間!

  可以學(xué)習(xí)clock()函數(shù)來計(jì)算一下代碼優(yōu)化程度。

?

轉(zhuǎn)載于:https://www.cnblogs.com/hualian/p/11160241.html

總結(jié)

以上是生活随笔為你收集整理的【C++快读快输详解(快速读入数字,快速输出数字)】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。