本文转载自:http://www.cnblogs.com/lifeathappiness/p/3530344.html
3.1预定义,重定向输入
上边的代码中已经显示出来了。把测试文本保存下来,运行时便直接得到结果了,ACCEPTED的情况下\(^o^)/~
#ifdef ONLINE_JUDGE
#else
freopen("E:\\in.txt","r",stdin);
#endif
这段代码,个人一般放在文件包含后面,但是如果使用的VC6.0,netbeans,应当把它放到main()函数中,不然会出错,它们的提示错误还不同。
不过目前在HDOJ放在前面不出现错误。
3.2预定义,断言
断言用处大,用的妙。
#ifdef ONLINE_JUDGE //判断是不是OJ系统,非OJ系统调试可另起名字
#define ASSERT_LEVEL 1
#else
#define ASSERT_LEVEL 0
#endif
#if (ASSERT_LEVEL>=1)
#define ASSERT(exp) _assert(#exp, __FILE__, __LINE__)
#else
#define ASSERT(exp) 0
#endif
double foo(int n) //计算阶乘
{
ASSERT(n>=0);
return n*foo(n-1);
}
#include <stdio.h>
int main(void)
{
int n=10;
printf("%d\n", foo(n));
return 0;
}
以上为一个错误递归算阶乘的程序示例,运行一下你就知道断言的威力了。
那个foo函数应当改为:
double foo(int n) //计算阶乘
{
ASSERT(n>=0);
if(n==0)return 1;
return n*foo(n-1);
}
今天该整理其他了:暂时休息。