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

读入输出优化

时间:2018-10-19 00:09:32      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:实参   print   不能   int   sdn   递归   soft   ||   line   

 1.读入优化

  完整理解:

 1 void read(int &x)//‘&‘表示引用,也就是说x是一个实参,在函数中改变了x的值就意味着在外面x的值也会被改变
 2 {
 3     int f=1;//标记正负
 4     x=0;//归零(这就是潜在bug,有可能传进来时x没有归零)
 5     char s=getchar();//读入第一个字符
 6     while(s<0||s>9)//不是数字字符
 7     {
 8         if(s==-)//不能直接把f=-1,有可能输入的不是‘-‘而是其他乱七八糟的东西
 9             f=-1;
10         s=getchar();//继续读
11     }
12     while(s>=0&&s<=9)//是字符(一旦不是字符就意味着输入结束了)
13     {
14         x=x*10+s-0;
15         s=getchar();
16     }
17     x*=f;//改变正负
18 }

 2.输出优化

  完整理解:

 1 void print(int x)//这里不用实参
 2 {
 3     if(x<0)//负数
 4     {
 5         putchar(-);
 6         x=-x;
 7     }
 8     if(x>9)//只要x还是2位数或更多就继续分解
 9         print(x/10);//这里递归完后栈里面x的每一位是倒过来的
10     putchar(x%10+0);//输出(要把int型变为char型,加‘0‘即可)
11 }
  • 所以整理一下就长这样

void read(int &x)
{
    int f=1;x=0;char s=getchar();
    while(s<0||s>9) {if(s==-) f=-1;s=getchar();}
    while(s>=0&&s<=9) {x=x*10+s-0;s=getchar();}
    x*=f;
}

void print(int x)
{
    if(x<0) putchar(-),x=-x;
    if(x>9) print(x/10);
    putchar(x%10+0);
}

  最后还有一个buff,但不能本地调试

inline char nc(){
    static char buf[100000],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int red(){
    char ch=nc();int sum=0;
    while(!(ch>=0&&ch<=9))ch=nc();
    while(ch>=0&&ch<=9)sum=sum*10+ch-48,ch=nc();
    return sum;
}

其它什么的详见这里

 

读入输出优化

标签:实参   print   不能   int   sdn   递归   soft   ||   line   

原文地址:https://www.cnblogs.com/kylara/p/9813352.html

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