一、题目:求出1!+2!+3!+...+n!
二、解题思路及相关代码:
1、1!+2!+3!+...+n!
=1!+2!+3!+...+n!*1
=1!+2!+3!+...+ (n-1) !*(1+n)
=1!+2!+3!+...+ (n-2) !*(1+ (n-1)*(1+n) )
=1!+2!+3!+...+(n-3)!*(1+ (n-2)*(1+(n-1)*(1+n)) )
有以上的规律可知,用循环实现:
public class Sum_n {
public static Integer sum_n(Integer n){
Integer result=1;
for(Integer i=n;i>1;i--){
result=1+result*i;
}
return result;
}
}
2、由于整型的数剧空间大小是有限的,而如果n很大那么n!就不能直接用result接收,这时我们就利用数组来存储结构的每一位。此时最终代码如下:
package N_zero;
public class Sum_n {
@SuppressWarnings("unused")
public static void sum_n(Integer n) {
// Integer result=1;
Integer num = 1;
Integer[] a = new Integer[1000];
a[0] = 1;
Integer i, j, k;
for (i = 1; i < 1000; i++)
a[i] = 0;
for (i = n; i > 1; i--) {
for (j = 0; j < num; j++) {
a[j] = a[j] * i;
}
a[0]=a[0]+1;
for (k = 0; k < num; k++) {
if (a[k] > 10) {
a[k + 1] = a[k + 1] + a[k] / 10;
a[k] = a[k] % 10;
if (k + 1 == num)
num++;
}
}
}
for(i=num-1;i>=0;i--)
System.out.print(a[i]);
}
}
主函数为:
package N_zero;
public class Main {
public static void main(String[] args){
Sum_n.sum_n(6);
}
水木轩昊昊