求阶乘,阶乘求和,数列求和
package arithmetic;
/**
* 多种数列求和类型,有
* 1、阶乘fac
* 2、阶乘求和facSum
* 3、数列求和seriesSum 2/1 ,3/2 ,5/3......
* 4、同数子列sameSum s=a+aa+aaa+....
*
* @author sunRainAmazing
*
*/
public class SeriesNumberToSum {
public static void main(String[] args) {
int num=5;
System.out.println(num+"的阶乘为:"+getFactorialBy_If(num));
System.out.println(num+"的阶乘为:"+getFactorialBy_while(num));
System.out.println(num+"的阶乘和为:"+getFactorialSum(num));
}
/**
* 求一个非0正整数数自身的阶乘
* if else 递归计算
* @param number
* @return
*/
public static long getFactorialBy_If(int number){
long value=1;
if (number == 1){
return value;
}else if (number > 1) {
value = number * getFactorialBy_If(number - 1);
}
return value;
}
/**
* 求一个非0正整数数自身的阶乘
* while 循环
* @param number
* @return
*/
public static long getFactorialBy_while(int number){
long value=1;
if (number == 1)
return value;
while (number > 1) {
value*=(number--);
}
return value;
}
/**
* 将自身其下的数的阶乘相加
* 如当为5时,5!+4!+3!+2!+1!
* @param number
* @return
*/
public static long getFactorialSum(int number){
long sum=0;
for(int i=1;i<=number;i++){
sum+=getFactorialBy_while(i);
}
return sum;
}
/**
* 同数子列sameSum s=a+aa+aaa+....
*
* @param number 要计算的算子
* @param count 要叠加的次数
* @return
*/
public static long getSameSum(int number,int count){
long sum2=0,sum1=0;
for(int i=1;i<count+1;i++){
sum2+=number;
number*=10;
sum1+=sum2;
}
return sum1;
}
/**
* 输入n为偶数时,执行求: 1/2+1/4+...+1/n,
* 当输入n为奇数时,执行求: 1/1+1/3+...+1/n;
* 注意i的步值
*
* @param number 输入的数
* @return
*/
public static double getSeriesSum(int number){
double sum=0;
if(number%2==0){
for(int i=2;i<=number;i+=2){
sum+=1.0/i;
}
}else{
for(int i=1;i<=number;i+=2){
sum+=1.0/i;
}
}
return sum;
}
/**
* 求 1/2+3/2+5/3...
* @param number 输入的数
* @return
*/
public static double getSeriesSumUp1(int number){
int x = 2, y = 1;
double sum=0;
for (int i=1; i<number; i++) {
sum +=(x*1.0/y);
x = x + y;
y = x - y;
}
return sum;
}
/**
* 求 1/2+3/2+5/3...
* @param number 输入的数
* @return
*/
public static double getSeriesSumUp2(int number){
double sum=0;
int temp,i,fenZi=2,fenMu=1;
for (i=1;i<=number;i++){
sum=sum+fenZi*1.0/fenMu;
temp=fenZi;
fenZi=fenZi+fenMu;
fenMu=temp;
}
return sum;
}
}