题目描述
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
分析:这是一个等差数列求和,通项公式为sum = ((1+n)*n)/2 = (n^2 + n)/2。
方法一:右移一位相当于除以2.故可借助Math.pow()+ >>(右移)来实现。
具体实现代码如下:
public class Solution {
public int Sum_Solution(int n) {
/*
分析:这是一个等差数列求和,通项公式为sum = ((1+n)*n)/2 = (n^2 + n)/2。
方法一:右移一位相当于除以2.故可借助Math.pow()+ >>(右移)来实现。
*/
int sum = (int)Math.pow(n,2) + n;
return sum>>1;
}
}
方法二:可以利用逻辑与&&来配合递归来实现,根据题意得:f(n)=f(n-1)+n,递归终止条件为:f(1)=1。(短路与&&)
具体代码实现如下:
public class Solution {
public int Sum_Solution(int n) {
/*
分析:这是一个等差数列求和,通项公式为sum = ((1+n)*n)/2 = (n^2 + n)/2。
方法二:可以利用逻辑与&&来配合递归来实现,根据题意得:f(n)=f(n-1)+n,递归终止条件为:f(1)=1。
*/
int sum = (int)Math.pow(n,2) + n;
return sum>>1;
}
}
人生若只如初见,何事秋风悲画扇。
等闲变却故人心,却道故人心易变。
-----------纳兰性德
小白寄语:学如逆水行舟,不进则退。