求10!+11!+…+20! 的值

求10!+11!+…+20! 的值

package com.admxj.factorial;
/*
 * 2015年12月9日20:57:14
 * 求和10!+11!+12!+13!***20!
 */
public class Day02 {
	public static void main(String[] args) {
		//定義起始變量和結束變量
		int begin = 10;
		int end = 20;
		long result = factorial_1(begin, end);
		System.out.println(ouputStr(begin,end)+result);
	}
	/*
	 * 階乘求和
	 */
	public static long factorial_1(int begin, int end){
		if(begin >end){
			begin = begin^end;
			end = begin^end;
			begin = begin^end;
		}
		long sum = 0;
		for(int i = begin; i <= end; i++){
			sum = sum + factorialRecursion(begin);
			begin++;
		}
		return sum;
	}
	/*
	 * 求階乘
	 */
	public static long factorialRecursion(int n){
		if(n == 1){
			return 1;
		}else{
			return n*factorialRecursion(n-1);
		}
		
	}
	/*
	 * 獲取字符串10!+11!+12!+13!***20!
	 */
	public static String ouputStr(int begin, int end){
		if(begin >end){
			begin = begin^end;
			end = begin^end;
			begin = begin^end;
		}
		String str = "";
		if(begin == end){
			return str+ begin + "!=";
		}else{
			return str+ begin + "!+"+ouputStr(++begin, end);
		}
	}
}

第二種優化後

package com.admxj.factorial;
/*
 * 2015年12月9日21:31:01
 * 求和10!+11!+12!+13!***20!
 */
public class Day02Lin {
	public static void main(String[] args) {
		int begin = 10;
		int end = 20;
		System.out.println(factorial(begin,end));
	}
	public static long factorial(int begin, int end){
		long result = 0;
		for(;begin <= end; begin++){
			long sum = 1;
			for(int j = 1; j <= begin; j++){
				sum *=j;
			}
			result += sum;
		}
		return result;
	}
}

再次簡化乘法運算

package com.admxj.factorial;
/*
 * 2015年12月9日21:31:01
 * 求和10!+11!+12!+13!***20!
 */
public class Day02Lin {
	public static void main(String[] args) {
		int begin = 10;
		int end = 20;
		System.out.println(factorial(begin,end));
	}
	public static long factorial(int begin, int end){
		int count = 0;
		long result = 0;
		long sum = 1;
		int p = begin;
		//判斷是否爲第一個數
		for(;p <= end; p++){
			if(begin == p){
				for(int j = 1; j <= p; j++){
					sum *=j;
					count++;
				}
			}else{
				sum *=p;
				//count++;
			}
			result += sum;
		}
		System.out.println("乘法次數:"+count);
		return result;
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章