题目描述:
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
解题思路:
方法1:开始我以为可以用三目运算符进行计算,当我把程序提交的时候发现通过不了测试用例;所以我找到了另外一种办法——是利用逻辑运算符&&的短路特性实现条件判断语句(A?B:C)。
方法2:利用等差数列求和公式,sum = n(n+1)/2,好了,直接看代码,看完代码再说思路。
实现代码:
方法(1)
class Solution {
public:
int Sum_Solution(int n)
{
int sum = n;
sum&&(sum+= Sum_Solution(n-1));
return sum;
}
};
方法(2)
class Solution {
public:
int Sum_Solution(int n)
{
char array[n][n+1];
return sizeof(array)>>1;
}
};
代码详解:
方法1:
(1)定义一个变量sum,如果sum==0;结果返回0;
(2)如果sum!=0;则返回sum=sum+Sum_Solution(n-1);
这里利用了递归的方法。
方法2:
(1)定义一个char array[n][n+1]型的数组,每个数组元素的大小占1字节;
(2)求这个数组的大小,结果右移一位(即除以2)。