您的位置:首页 > 其它

程序竞赛中需要注意的一些小问题2

2013-02-15 01:27 260 查看
1、浮点运算可能存在误差,在进行浮点数的比较时,应考虑到浮点误差。浮点数不应用来做等号的比较。

2、当需要统计某种事物的个数时,可以用一个变量来充当计数器。

3、不要忘记测试,一个看上去正确的程序可能会隐含着错误。

4、在观察无法找出错误时,可以用“输出中间结果”的方法来查错。

5、求阶乘之和:S=1!+2!+3!……+n!;

代码:

#include <stdio.h>

int main(void)

{

 int i, j, n, S = 0;

 scanf("%d", &n);

 for(i = 1;i <= n;i++) {

  int factorial = 1;

  for(j = 1;j <= i;j++) {

   factorial *= j;

  }

  S += factorial;

 }

 printf("%d\n", S % 1000000);

 

 return 0;

}

这段代码有很明显的不足之处,当n较大时,程序就容易溢出,这里可以根据我们的数学知识改进一下,

提示:要计算只包含加法、减法、和乘法的整数表达式除以正整数n的余数,可以在每步计算之后对n取余,结果不变。

这样,溢出的问题就轻松解决了。

6、往往在程序竞赛中程序运行的时间也有严格的要求,如果程序效率太低,跑的太慢,则会造成超时,因为我们可以使用一个方法来检测一下自己的程序的效率如何,要用到下面的这个函数:clock();使用这个函数要包含头文件:time.h;使用方法如下:

printf("time used = %.2lf\n", (double)clock()/CLOCK_PER_SEC);这个语句的意思是,或得程序运行的时间,并以秒的单位输出。这样我们就可以大概的了解一下自己程序的效率了。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: