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