• C++ 读入优化&输出优化



    读入优化:读入优化只是针对整数,由于getchar()读字符非常的快,所以采用getchar()来进行读入,下设输入的数为x

    • 负数处理:
      用一个标志变量f,开始时为1,当读入了'-'时,f变为-1,最后x*=f即可
    • 绝对值部分处理:
      getchar()每次只能读一位,所以每当读了一位s时,x*=10,为s留位置,由于s为字符,需要减去'0'才能转为整数
      即:x=x*10+s-'0'
    • 关于细节:
    • 很多时候有多余的空格或者其它的一些无关字符输入,处理时需要注意排除
    • 代码:
       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 }
    • 可以用来装逼的代码:
       1 #define num s-'0'
       2 void read(int &x){
       3     char s;
       4     x=0;
       5     bool flag=0;
       6     while(!isdigit(s=getchar()))
       7         (s=='-')&&(flag=true);
       8     for(x=num;isdigit(s=getchar());x=x*10+num);
       9     (flag)&&(x=-x);
      10 }

       这段代码里面,isdigit()是用判读一个字符是否是数字字符的,需要#include<cctype>,&&是短路运算符,所以第一个条件不满足时第二个条件直接跳过了。


    输出优化:putchar()输出字符很快,所以用putchar()来输出

    • 负数处理:
      如果是负数,直接putchar('-'); x=-x; 即可
    • 绝对值部分处理:
      为了极致的速度,用递归,递归下一位,即x/10,然后,要注意边界,只有当x>9才能继续递归,否则输出x%10,即putchar(x%10+'0'),把int变为char,+'0'即可
    • 代码:
       1 void write(int x)//这里当然不用实参
       2 {
       3     if(x<0)//负数
       4     {
       5         putchar('-');
       6         x=-x;
       7     }
       8     if(x>9)//只要x还是2位数或更多就继续分解
       9         write(x/10);//这里递归完后栈里面x的每一位是倒过来的
      10     putchar(x%10+'0');//输出(要把int型变为char型,加'0'即可)
      11 }
  • 相关阅读:
    编写更好的API
    C,C++语法基础 | 字符串 | 05
    C,C++语法基础 | 变量,表达式与顺序语句 | 01
    业务数据分析 | 深入浅出数据分析入门 | 01
    linux全套 | 目录 | 00
    linux全套 | 组管理和权限管理 | 08
    linux全套 | crond任务调度 | 09
    linux全套 | linux磁盘分区,挂载 | 10
    linux全套 | 网络配置 | 11
    linux全套 | 进程管理 | 12
  • 原文地址:https://www.cnblogs.com/Ymir-TaoMee/p/9457772.html
Copyright © 2020-2023  润新知