计算等差数列之和
2015-09-08 10:36
316 查看
题目:求1+2+…+n,
要求:不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
先来看看解题的算法过程:
解释一下吧!
学过计算机技术的人都知道,书上在很靠前的位置总会有这么一句话,2进制下乘法就是错位相加。这就是原理。int有32个bit位,我就把这错位相加写32次。其实就是乘法。这个的算法效率比递归快。递归O(n),这个O(1),代码多又怎样?用户又看不出来。
还有其他思路没?
能用乘除更简单,可以使用求等差数列公式求和公式 Sn=n(a1+an)/2 或Sn=na1+n(n-1)d/2 (具体过程请自己查相关资料)
求等差数列的前N项和公式n*(n+1)/2,既然二进制乘法是加法,把n*(n+1)/2转换成二进制计算不就更简单点么,以上思路留着大家思考,或等我将来再尝试着实现。
出处:qq算法群聊天记录
要求:不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
先来看看解题的算法过程:
解释一下吧!
学过计算机技术的人都知道,书上在很靠前的位置总会有这么一句话,2进制下乘法就是错位相加。这就是原理。int有32个bit位,我就把这错位相加写32次。其实就是乘法。这个的算法效率比递归快。递归O(n),这个O(1),代码多又怎样?用户又看不出来。
还有其他思路没?
能用乘除更简单,可以使用求等差数列公式求和公式 Sn=n(a1+an)/2 或Sn=na1+n(n-1)d/2 (具体过程请自己查相关资料)
求等差数列的前N项和公式n*(n+1)/2,既然二进制乘法是加法,把n*(n+1)/2转换成二进制计算不就更简单点么,以上思路留着大家思考,或等我将来再尝试着实现。
出处:qq算法群聊天记录
相关文章推荐
- 0907正向传值/反向传值 蓝懿
- ASP.NET MVC 3 loginUrl自动变成Account/Login,并且发生404错误的解决方法
- Android编译,模块的编译和CLEAN
- 微信协议分析] 文本消息
- JQuery Ajax Post实例
- 利用jpeglib库进行图像压缩和解压缩
- Python 创建空列表的字典
- python中sleep函数
- Win10怎么召唤微软小冰刷颜值?
- QT事件(4)
- bzoj-2178 圆的面积并
- JVM基础 之Java HotSpot虚拟机中的内存管理
- PSI在windows server2008服务器上的安装方法
- <转>iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!
- linux shell脚本:在脚本中实现读取键盘输入,根据输入判断下一步的分支
- 欢迎使用CSDN-markdown编辑器
- I2C总线的仲裁机制
- Google Python Class 之——日志re分析,批量下载图片,形成html目录
- 最小的K个数
- 《C++入门经典(第4版)》之C++编程总结