ACM 编程也是需要一些通用的代码片段的.熟练掌握这些代码片段可以在后面的编程中更加方便.
验证完全平方数
情景描述
验证整数n是否是完全平方数代码片段
1#include<math.h> 2double m=sqrt(n); 3if(floor(m+0.5)==m) 4 printf("%d是完全平方数。\n",m);
``
亮点
函数floor(x)
返回 x 的整数部分,但浮点数的运算(sqrt
)有可能存在误差(不经常,但一定会有)。若由于误差影响,整数 1 变成 0.99999 ,那么floor(m)==m
就会产生误差。
计算程序所花时间
情景描述 计算程序片段所花的时间
代码片段
1#include<time.h> 2printf("Time used=%.2lf\n",(double)clock()/CLOCKS_PRE_SEC);
优势
能够清楚的检验程序是否满足比赛时间要求
输入输出重定向
情景描述
本机测试时用文件重定向,一旦提交到比赛,就自动“删除”重定向语句代码片段
1#ifdef LOCAL 2 freopen("data.in","r",stdin); 3 freopen("data.out","w",stdout); 4#endif
编译命令
将上面代码置于main函数最上面。编译时用下面的命令[命令中定义了LOCAL]1gcc main.c -o main -DLOCAL
亮点
本机测试时,因为定义了 LOCAL 变量而使用了重定向,而上传后因为比赛编译命令里没有 -DLOCAL 选项而不会使用重定向。