码迷,mamicode.com
首页 > 其他好文 > 详细

读入与输出

时间:2018-08-16 14:59:17      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:getch   define   sync   状态   mac osx   ongl   ifd   for   ==   

读入与输出

scanf

  scanf读入char数组不需要写&

  scanf读入longlong类型时在unix(linux ububt mac osx)下用lld,在WIN32下用I64d,WIN64下以上两种都可以。为了考试时避免忘记更改可以在文件开头加上

  #ifdef WIN32
  #define LL "%I64d"
  #else
  #define LL "%lld"
  #endif

调用时

  scanf(LL,&a);

cin

cin正常状态下比scanf读入慢,但是可以在文件开头加入

ios::sync_with_stdio(false)

可以使速度大大提升,但是写上这句话之后不再能够使用scanf

读入优化

getint

void read(int &x)
{
    x=0;int f=1;
    char c=getchar();
    while(!isdigit(c))
    {
    if(c=='-') f=-1;
    c=getchar();
    }
    while(isdigit(c))
    {
    x=x*10+c-'0';
    c=getchar();
    }
    x*=f;
}

ifread

char ch;
char buf[100000],*p1 = buf,*p2 = buf;
#define nc()     p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2) ? EOF :*p1++;
#define read(x)      x=0;ch=nc();     while(!isdigit(ch)) ch=nc();    while(isdigit(ch))x=x*10+ch-'0',ch=nc();

输出优化

  char s[80000000]
  void print(int v)
  {
      int x=0,y=0
      while(v)
      {
        x++;
        y=y*10+v%10;
        v/=10;
      }     
      for(int i=1;i<=x;++i)
      {
        s[++l]=y%10+'0';
        y/=10;
      }
      l++;
      s[l]='\n';
  }

速度比较

读入1e7个int

标准cin: 12.23s

scanf: 9.718s

getint: 2.996s

ios::sync_with_stdio(false)+cin:2.18s

ifread:0.6948s

输出1e7个数

printf: 30s

cout: 20s

输出优化:1.47s

读入与输出

标签:getch   define   sync   状态   mac osx   ongl   ifd   for   ==   

原文地址:https://www.cnblogs.com/wxyww/p/9487034.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!