欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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

发布时间:2025/7/25 143 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【C++快读快输详解(快速读入数字,快速输出数字)】 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

  众所周知,C++自带读入(废话),如

int a; cin>>a;

  这个读入简单方便,但到后面,读的东西多了,读的也就显得慢些,所以有了下面的方式

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

  这样虽然快了,能通过大部分题了。

  但是有一些毒瘤题还是会卡时间,于是快读出现了。

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 }

 

  其实也没有什么难的,只是通过读入字符而后来转成数字,而原理就是读入字符比数字快(不要问我为什么)

 

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

  重点是第十行:x=(x<<1)+(x<<3)+(ch^48);

  " << x" 操作为二进制操作,原理是将原二进制数向左平移 x 位,右边原位置以 0 补齐

  例如:

   原二进制数 10001   经过 << 2 后,变为 1000100 

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

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

      ………………

  所以 (x<<1)+(x<<3) 可视为 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 { 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 }

  这个代码中,我们用一个char数组存储,

  putchar是单个字符的输出方式

  相信有了这套快读快写,你以后的代码会大大减少时间!

  可以学习clock()函数来计算一下代码优化程度。

 

转载于:https://www.cnblogs.com/hualian/p/11160241.html

总结

以上是生活随笔为你收集整理的【C++快读快输详解(快速读入数字,快速输出数字)】的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。