题目描述
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
思路:第一感觉是等差数列求和套用公式就行,代码如下
class Solution {
public:
int Sum_Solution(int n) {
return (n+1)*n/2;
}
};
仔细看了一下题目发现不能用乘除法,上述代码不符合要求,仔细分析一下,除2,可以用>>1右移1位代替,关键是(n+1)*n中的乘号怎么解决,这里可以用求一个二维数组的内存大小来代替,代码如下;
class Solution {
public:
int Sum_Solution(int n) {
int s[n][n+1];
return sizeof(s)>>3;
}
};
当然还可以用递归实现,关键是递归出口条件怎么写,因为题目中要求不能用条件判断语句,这里看到有人用&&短路判断递归出口条件,代码如下;
class Solution {
public:
int Sum_Solution(int n) {
int sum = n;
n&&(sum+=Sum_Solution(n-1));
return sum;
}
};