在看这一点前,我希望大家编写一个程序:
求出1+2+3+......+100的值,并输出
写完了吗?我想你写的程序的算法会和我的差不多:
#include <stdio.h>
int main()
{
int sum=0;
for(int i=1; i<=100; ++i)
{
sum+=i;
}
printf("1+2+......+100=%d", sum);
return 0;
}
但我可以告诉你,你我的算法并不是最好的算法,下面我们看一看另一种算法:
#include <stdio.h>
int main()
{
int sum;
sum=(1+100)*100/2;
printf("1+2+......+100=%d", sum);
return 0;
}
是不是恍然大悟,我问过几位同学,他们的算法都是第一种,我最初也是。但我们为什么不用数学公式呢?我们为什么不借助数学的力量呢?
参考资料:
C语言高效编程的四大绝招
2007年7月20日:
最近,我在XX论坛中看到一些大侠的评论,说得很好:为什么不直接输出5050呢?(如下)
#include <stdio.h>
int main()
{
printf("5050\n"); //PRINT 1+2+3+......+99+100
return 0;
}
这似乎可以追求到更高的效率。但我还是要再次发表自己的意见:在效率上,直接输出可能会略胜一筹,但C标准允许常量表达式在编译期间确定值,也就是说-------大多数情况下直接把值计算出来的效率是不会高的,而且这样还会使你的程序变得难阅读。所以建议大家使用还是写常量表达式而不写值。