C++ 读入优化与输出优化 模板

来自:https://blog.csdn.net/liyizhixl/article/details/54412459

简介

  • C++ 是一种神奇的编程语言……

  • 自然,读入和输出也有着许多种形式:

  • 如:scanf()&#xFF0C;cin&gt;&gt;&#xFF0C;cout&lt;&lt;&#xFF0C;printf()” role=”presentation”>scanf()cin>>cout<<printf()scanf(),cin>>,cout<<,printf()

  • 但是我们奉行——效率第一!!!

  • 那么如何提高读入和输出的效率呢?

用法

1. 读入优化

  • C++中有一个函数:getchar() ,用于读入字符,那么这跟读入整数有什么关系呢?

  • 其实,经过类似高精度的处理,就可以实现类型转换啦!

  • 下面是正负数读入优化模板:

#include<cctype>
inline int read()
{
    int X=0,w=0; char ch=0;
    while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
    while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
    return w?-X:X;
}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • isdigit(x)” role=”presentation”>isdigit(x)isdigit(x)

  • 注意要用 cctype” role=”presentation”>cctypecctype 头文件。

  • 像这样“XXX=read()”使用函数即可,效率超高!

  • 这里补充一个正负实数的读入优化:

inline double dbread()
{
    double X=0,Y=1.0; int w=0; char ch=0;
    while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
    while(isdigit(ch)) X=X*10+(ch^48),ch=getchar();
    ch=getchar();//读入小数点
    while(isdigit(ch)) X+=(Y/=10)*(ch^48),ch=getchar();
    return w?-X:X;
}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2. 输出优化

  • 在个别繁杂题目中,也可以使用输出优化!

  • 与读入优化类似,使用用来输出字符的“putchar()”函数,也可到目的

  • 下面是正负数输出优化模板:

inline void write(int x)
{
     if(x<0) putchar('-'),x=-x;
     if(x>9) write(x/10);
     putchar(x%10+'0');
}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 同样时间减减!

总结

  • 使用读入优化与输出优化,可以在一些题目中赢得很多时间,甚至逆转AC!

  • 而且代码很短,性价比很高,完全可以经常使用!

注意

  • 切记在使用时,应注意数据类型大小和正负!

简介

  • C++ 是一种神奇的编程语言……

  • 自然,读入和输出也有着许多种形式:

  • 如:scanf()&#xFF0C;cin&gt;&gt;&#xFF0C;cout&lt;&lt;&#xFF0C;printf()” role=”presentation”>scanf()cin>>cout<<printf()scanf(),cin>>,cout<<,printf()

  • 但是我们奉行——效率第一!!!

  • 那么如何提高读入和输出的效率呢?

用法

1. 读入优化

  • C++中有一个函数:getchar() ,用于读入字符,那么这跟读入整数有什么关系呢?

  • 其实,经过类似高精度的处理,就可以实现类型转换啦!

  • 下面是正负数读入优化模板:

#include<cctype>
inline int read()
{
    int X=0,w=0; char ch=0;
    while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
    while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
    return w?-X:X;
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • isdigit(x)” role=”presentation”>isdigit(x)isdigit(x)

  • 注意要用 cctype” role=”presentation”>cctypecctype 头文件。

  • 像这样“XXX=read()”使用函数即可,效率超高!

  • 这里补充一个正负实数的读入优化:

inline double dbread()
{
    double X=0,Y=1.0; int w=0; char ch=0;
    while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
    while(isdigit(ch)) X=X*10+(ch^48),ch=getchar();
    ch=getchar();//读入小数点
    while(isdigit(ch)) X+=(Y/=10)*(ch^48),ch=getchar();
    return w?-X:X;
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2. 输出优化

  • 在个别繁杂题目中,也可以使用输出优化!

  • 与读入优化类似,使用用来输出字符的“putchar()”函数,也可到目的

  • 下面是正负数输出优化模板:

inline void write(int x)
{
     if(x<0) putchar('-'),x=-x;
     if(x>9) write(x/10);
     putchar(x%10+'0');
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 同样时间减减!

总结

  • 使用读入优化与输出优化,可以在一些题目中赢得很多时间,甚至逆转AC!

  • 而且代码很短,性价比很高,完全可以经常使用!

注意

  • 切记在使用时,应注意数据类型大小和正负!

猜你喜欢

转载自blog.csdn.net/Krone_/article/details/81589352