阶乘求和

求阶乘,阶乘求和,数列求和

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;
    }

}
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页