求1+2+3+...+n你真的做的到吗?
来源:互联网 发布:计价软件试用版 编辑:程序博客网 时间:2024/06/06 23:56
有这样一道C/C++题:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
还有多少种解法?对于这个问题限制了我们常用的求解方式,目的是想让我们另辟蹊径。那么我们只有硬着头皮找各种方式来应对此题,下面为大家带来几个来自网友们的方法,供我们共同学习:
1、利用了&&的短路特性:即当&&(与)的左边为假时整个表达式为假,右边的不用再计算了;下边附上解决代码:
class
Solution {
public
:
int
Sum_Solution(
int
n) {
int
sum = n;
sum && (sum += Sum_Solution(n - 1));
return
sum;
}
};
1)利用逻辑与的短路特性实现递归终止。
2)
当n==
0
时,
sum && (sum += Sum_Solution(n - 1))
只执行前面的判断,为
false
,然后直接返回
0
;
3)
当n>
0
时,执行sum+=Sum_Solution(n-
1
),实现递归计算Sum_Solution(n)。
2、用公式是不可以的,公式里有乘法!!实现乘法可以用sizeof多维数组,
class
Solution {
public
:
int
Sum_Solution(
int
n) {
bool
a[n][n+1];
return
sizeof
(a)>>1;
}
};
3、当有人说用公式不可以的时候,别人果断的用其他方式利用了公式,而且只需要一行(惊呆):
class Solution {
public :int Sum_Solution(int n) {
return ( (int) (.pow(n, 2)+n))>>1; }
}
4、用异常退出递归public class Solution {
public int Sum_Solution(int n) {
return sum(n);
}
int sum(int n){
try{
int i = 1%n;
return n+sum(n-1);
}
catch(Exception e){
return 0;
}
}
}
class Solution {public: int Sum_Solution(int n) { //return n*(n+1)/2; return multi(n, n + 1) >> 1; } int multi(int a, int b){ // we can guarantee that both a and b is positive integers int res = int(pow(10, log10(a) + log10(b))+0.5); return res; }};
阅读全文
1 0
- 求1+2+3+...+n你真的做的到吗?
- 你真的了解while(n--)吗?
- 二分法 求1到N的和
- 求1到N之间的质数
- 求1到n的和
- 求1到N之间的素数
- 求1到n之间的素数
- 求1到n的倒数和
- 求1到n的平方和
- Q46:求1到n的和
- 求1 到 n 的阶乘之和,n由键盘输入。
- 求1到n的n次方和
- 做程序员你真的准备好了吗?
- 你真的会做决策吗?认知0007
- 你真的会做PPT么?
- 求1+2!+3!+...+N!的和
- 求1+2+3+...+n的和
- 求1+2+3+。。。+n的值
- Python 元组
- Java基础学习之-07
- 升讯威微信营销系统开发实践:(5) Github 源码:微信接口的 .NET 封装
- JavaScript入门基础--对象
- 最短路(floyd+bellman+dijkstra+dijkstra优先队列优化+spfa)
- 求1+2+3+...+n你真的做的到吗?
- leetcode1--two sum(easy)
- QTextEdit 当中添加图片的几种方式
- Date与String的相互转化
- 获取iOS设备唯一标识
- SCI论文投稿中图、表和公式的位置问题
- ONVIF协议网络摄像机(IPC)客户端程序开发(3):理解什么是Web Services
- POJ2456-Aggressive cows
- 使得ul标签中的li水平排列