求和比较高效的做法
2010-11-05 16:46
204 查看
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
一般做法是:
int sum(int n)
{
long sum=0;
for(int i=0;i<n;i++)
{
sum+=i;
}
return sum;
}
上面这种做法简单,方便可是效率怎么样,应该不是最好。
在数学上,我们有一个求和公式。n*(n+1)/2
于是有
int sum(int n)
{
return n*(n+1)/2;
}
显然,这样效率显然比上面要好得很多。
所以有时候算法高效只需要一个转变。而数学公式正是求解的导向。
一般做法是:
int sum(int n)
{
long sum=0;
for(int i=0;i<n;i++)
{
sum+=i;
}
return sum;
}
上面这种做法简单,方便可是效率怎么样,应该不是最好。
在数学上,我们有一个求和公式。n*(n+1)/2
于是有
int sum(int n)
{
return n*(n+1)/2;
}
显然,这样效率显然比上面要好得很多。
所以有时候算法高效只需要一个转变。而数学公式正是求解的导向。
相关文章推荐
- 高效比较数值大小
- 如何高效地进行远程大规模字符串比较问题
- awk求和比较
- 高效算法——J 中途相遇法,求和
- 2个集合比较——最高效解法(Java实现)
- Delphi+汇编例子1(求和的比较)
- 遇到的比较有意思的问题(1)去掉重复数字(2)提取数组的子数组,求和最大的子数组、最大的子数组和
- 总结5种比较高效常用的排序算法
- select、poll、epoll的比较-select轮询+sleep,epoll异步事件驱动高效
- 高效比较两个list集合中的差集
- JS下高效拼装字符串的几种方法比较与测试代码
- echarts x轴文字显示不全(xAxis文字倾斜比较全面的3种做法值得推荐)
- c++高效实现isupper,islower,isnum,isalpha的做法
- echarts x轴文字显示不全(xAxis文字倾斜比较全面的3种做法值得推荐)
- 总结5种比较高效常用的排序算法
- Android 中比较“高效”的图像模糊处理算法
- 简单但比较高效的解决:随机获取N个数字,这些数字在指定的范围内,获取的数字不能重复
- 关于两个List的增量高效比较
- 兼容IE和FF的js脚本做法(比较常用)
- 高并发网站更新数据库数据比较高效的方式