求 n! + (n - 1)! + ... + 1!

package tst;


import java.util.Scanner;


public class power {


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

while ( true ) {

System.out.print( "please input a number : " );//这里就选择不换行的了
Scanner sc = new Scanner(System.in);
int getSc = sc.nextInt();
int tmp = getSc;

if ( getSc == 0 || getSc == 1) { //0! and 1! is 1
System.out.println(1);
continue;
} else if ( getSc == 2 ) { // 2! = 2 * 1 = 2
System.out.println( getSc * ( getSc - 1 ) );
continue;
} else if ( getSc > 2 ) { //n! = n * ( n - 1) * ... * 1
int tmpGetSum = 0;
/*
* 这个地方解释好难,主要是为了实现 n! + ( n - 1 )! + ... + 1!
* 首先是求阶乘,用了函数,比如输入5,会把 5! 和 4!的和求出来保存
* 接着把要循环的值减2,也就是 3! 和 2!,最后到1;
* 这个地方应该不太好,不过毕竟是自己想的,好难想出问题在哪,应该是0的问题,
* 所以后面有一个求getSum的返回值,如果小于0就返回0,机智
*/
for ( int i = 1; i < tmp; i++) {
tmpGetSum += getSum( getMult ( getSc ), getMult ( getSc - 1) ); 
getSc = getSc - 2;

System.out.println( "tmpGetSum : " + tmpGetSum);
continue;
} else {
System.out.println( "Wrong numer , please try again !");
continue;
}

}


}
final static int getMult ( int getVal ) { //简单求阶乘函数
int tmp = getVal;
int reVal = getVal;
for ( int i = 0; i < tmp - 1; i++) {
reVal *= ( i + 1 );
}
return reVal;
}
final static int getSum ( int getVal1, int getVal2 ) { //最简单的莫过于 return getVal1 + getVal2
int tmp = getVal1;
int reVal = getVal2;
int zero = 0;
int tmpRe = tmp + reVal;
if ( tmpRe < 0) { //出现过小于0的情况,所以机智的调成返回0就 ok了
return zero; 
}
return tmpRe;
}

}


运行结果:

please input a number : 5
tmpGetSum : 153
please input a number : 7
tmpGetSum : 5913
please input a number : 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值