zoukankan      html  css  js  c++  java
  • 快速读取

    在正常读入的时候公认 scanf 比 cin 快,因为 cin 为了与 stdin 保持同步,防止两者混用时指针混乱,但同时会带来许多额外的开销,尽管可以在主函数中添加:

    std::ios::sync_with_stdio( false );

    来取消 cin 与 stdin 的同步,可以加快 cin 的读入速度,但是在本人测试后,发现 cin 依然比 scanf 慢很多,所以尽量使用 scanf 会比较好,但是在做题时发现仍然存在读入过大时快速读入的方法,就是用 getchar 来代替,getchar 比 scanf 快很多。

    而读入字符和字符串时直接可以用 getchar ,但在读入整型数和浮点型数时,就需要对 getchar 加以改造

    整形数读入:

     1 inline bool scan_d(int &num)  
     2 {
     3         char in;bool IsN=false;
     4         in=getchar();
     5         if(in==EOF) return false;
     6         while(in!='-'&&(in<'0'||in>'9')) in=getchar();
     7         if(in=='-'){ IsN=true;num=0;}
     8         else num=in-'0';
     9         while(in=getchar(),in>='0'&&in<='9'){
    10                 num*=10,num+=in-'0';
    11         }
    12         if(IsN) num=-num;
    13         return true;
    14 }
    View Code

    浮点数读入:

     1 inline bool scan_lf(double &num)  
     2 {
     3     char in;
     4     double Dec = 0.1;
     5     bool IsN = false,IsD = false;
     6     in = getchar();
     7     if(in == EOF) return false;
     8     while(in != '-' && in != '.' && (in < '0' || in > '9'))
     9         in = getchar();
    10     if(in == '-')
    11     {
    12         IsN = true;
    13         num = 0;
    14     }
    15     else if(in == '.')
    16     {
    17         IsD = true;
    18         num = 0;
    19     }
    20     else num = in - '0';
    21     if(!IsD)
    22     {
    23         while(in = getchar(),in >= '0' && in <= '9')
    24         {
    25             num *= 10;
    26             num += in - '0';
    27         }
    28     }
    29     if(in != '.')
    30     {
    31         if(IsN) num = -num;
    32         return true;
    33     }
    34     else
    35     {
    36         while(in = getchar(),in >= '0' && in <= '9')
    37         {
    38             num += Dec * (in - '0');
    39             Dec *= 0.1;
    40         }
    41     }
    42     if(IsN) num = -num;
    43     return true;
    44 }
    View Code
    日后若能有更好的想法,再来完善。 希望看到的大神不吝赐教 orz
  • 相关阅读:
    假期实践
    每周更新学习进度表
    作业三
    作业一
    作业二
    真实感海洋的绘制(一):基于统计学模型的水面模拟方法
    递推方程的求解
    真实感海洋的绘制(二):使用快速傅里叶变换加速波形计算
    "Mathematical Analysis of Algorithms" 阅读心得
    HTML2
  • 原文地址:https://www.cnblogs.com/Taskr212/p/9461208.html
Copyright © 2011-2022 走看看