ACM編程技巧--代碼片斷

  • 驗證n是不是徹底平方數
  1. #include<math.h>
  2. double m=sqrt(n);
  3. if(floor(m+0.5)==m)
  4. printf("%d是徹底平方數。\n",m);
亮點:函數floor(x)返回x的整數部分,但浮點數的運算(sqrt)有可能存在偏差[不常常,但必定會有]。若因爲偏差影響,整數1變成0.99999,那麼floor(m)==m就會產生偏差。
  • 計算程序所花費的時間
  1. #include<time.h>
  2. printf("Time used=%.2lf\n",(double)clock()/CLOCK+PRE_SEC);
優點:可以清楚的檢驗程序是否知足比賽時間要求
  • 本機測試時用文件重定向,一旦提交到比賽,就自動「刪除」重定向語句
  1. #ifdef LOCAL
  2. freopen("data.in","r",stdin);
  3. freopen("data.out","w",stdout);
  4. #endif
將上面代碼置於main函數最上面。編譯時用下面的命令[命令中定義了LOCAL]
gcc main.c -o main -DLOCAL
亮點:本機測試時,由於定義了LOCAL變量而使用了重定向,而上傳後由於比賽編譯命令裏沒有-DLOCAL選項而不會使用重定向。
  • 士大夫
相關文章
相關標籤/搜索