编程技巧之代码片段

 |   

ACM 编程也是需要一些通用的代码片段的.熟练掌握这些代码片段可以在后面的编程中更加方便.

验证完全平方数

  1. 情景描述
    验证整数n是否是完全平方数

  2. 代码片段

    1#include<math.h>
    2double m=sqrt(n);
    3if(floor(m+0.5)==m)
    4    printf("%d是完全平方数。\n",m);
    

    ``

  3. 亮点
    函数 floor(x) 返回 x 的整数部分,但浮点数的运算( sqrt )有可能存在误差(不经常,但一定会有)。若由于误差影响,整数 1 变成 0.99999 ,那么 floor(m)==m 就会产生误差。

计算程序所花时间

  1. 情景描述 计算程序片段所花的时间

  2. 代码片段

    1#include<time.h>
    2printf("Time used=%.2lf\n",(double)clock()/CLOCKS_PRE_SEC);
    
  3. 优势
    能够清楚的检验程序是否满足比赛时间要求

输入输出重定向

  1. 情景描述
    本机测试时用文件重定向,一旦提交到比赛,就自动“删除”重定向语句

  2. 代码片段

    1#ifdef LOCAL
    2    freopen("data.in","r",stdin);
    3    freopen("data.out","w",stdout);
    4#endif
    
  3. 编译命令
    将上面代码置于main函数最上面。编译时用下面的命令[命令中定义了LOCAL]

    1gcc main.c -o main -DLOCAL
    
  4. 亮点
    本机测试时,因为定义了 LOCAL 变量而使用了重定向,而上传后因为比赛编译命令里没有 -DLOCAL 选项而不会使用重定向。

技术茶话会
后一篇 >