zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    定制化培养:破解企业人才之困
    IT毕业生需要具备的六种能力素质
    JAVA值传递or引用传递
    就业形势严峻 毕业生需练好“内功”
    如何改变mysql auto increment 步长和初始值
    python变量作用域
    关于python的lxml.html 的fromstring 函数
    python string 到date object
    python mysql 连接数据库 latin1 codec错误
    python 使用 mysqldb 批量插入数据
  • 原文地址:https://www.cnblogs.com/Ymir-TaoMee/p/9457772.html
Copyright © 2011-2022 走看看