zoukankan      html  css  js  c++  java
  • 【快读】基本思路及模板

    先从C++自带的读入开始吧。

    int n;
    cin>>n;
    

    这样的读入简单,但是速度不占优势,适合初学者(虽然我之前一直在用)

    int n;
    scanf("%d",&n);
    

    这样的读入就比较快了,也较好理解,在题目不卡时间的情况下可以通过大部分题。
    但是!一些毒瘤 题目为了卡你时间,你需要更快(咳咳)的读入方法来完成读入。
    这里就涉及到getchar();
    这个函数的作用的读入单个字符;
    众所周知读入字符比读入数字要快一点(我也不知道为什么)
    所以就可以挨个读入字符,然后转成十进制的数返回。
    但是在这转化的过程中会涉及到一种新的运算(位运算)
    这种运算也是毒瘤
    这种运算很常见√
    先贴上代码:

    int read()
    {
       int x=0,f=1;
       char ch=getchar();
       while(ch<'0'||ch>'9'){
           if(ch=='-')
               f=-1;
           ch=getchar();
       }
       while(ch>='0'&&ch<='9'){
           x=(x<<1)+(x<<3)+(ch^48);
           ch=getchar();
       }
       return x*f;
    }
    

    这里要注意的是第十行;

    x=(x<<1)+(x<<3)+(ch^48);
    

    这里的<<x和>>x就是位运算操作。
    位运算是对相应的二进制数生效的,>>x是把这个二进制数向右平移x位,挤出去的扔掉 ,<<x就是把这个二进制数向左平移x位,空位以0补齐就可以了。
    例如:
    原二进制数 10001 经过 << 2 后,变为 1000100
    其效果:
    x << 1 == x * 2;
    x << 2 == x * 2 * 2;
    x << 3 == x * 2 * 2 * 2;
    ………………
    所以 (x<<1)+(x<<3) 可视为 x * 10;
    后面的 (ch^48) 效果为 ch-= ‘0’;
    但是getchar()只能读入单个字符,当然也包含空格,换行符,所以当读入有太多的空格及换行的时候,还是乖乖的用前面的方法吧。。。
    ov.

    个人博客地址: www.moyujiang.com 或 moyujiang.top
  • 相关阅读:
    记RestTemplate远程请求接口数据的一些注意事项
    记使用SpringDataMongonDb时,dao方法命名的一个已解决但不知道为什么的bug
    charles 打断点后传参或返回数据更改
    在liunx上搭建git仓库1
    jsonpath 提取参数
    pytest 参数化的使用1
    pytest中断言失败后,也可以继续执行其他用例
    charles开启弱网功能
    httprunner 参数化
    httprunner中debugtalk使用
  • 原文地址:https://www.cnblogs.com/moyujiang/p/11167728.html
Copyright © 2011-2022 走看看