给定一个数N 求n=!a+!b+!c.....+!X
!2=1*2
!3=1*2*3
!4=1*2*3*4
...
打印出a b c......x
!2=1*2
!3=1*2*3
!4=1*2*3*4
...
打印出a b c......x
解决方案 »
- 关于DES加解密
- 【求助】JAVA基础的一个小问题
- 请教一个socket 程序问题?
- Java哪些技术在工作中比较常用?
- 急!矩阵遍历问题!
- 奇怪!1433端口就是不能侦听,办法用尽没辙了,求救大家!回复必有分
- dear all,我想取得服務端的目錄結構在客戶端顯示﹐有沒有很好的解決辦法﹖
- 请问Microsoft SDK for Java 4.0在那里有的下载阿?
- Implementing an Interface的几个问题?
- 基于windowbuilder的socket通信问题
- 请教各位大哥,帮我参考下形势,走还是留?
- 100分送!JButtont 图像可以居中吗?java JButtont 图像是怎样设置的 ?
public static void main(String[] args) {
for(int i=0;i<10;i++){
System.out.println("!"+i+"="+fun(i));
}
}
public static int fun(int n){
if(n==0 || n==1){
return 1;
}else{
return n*fun(n-1);
}
}
}给个你参考一下(递归的思想)
public class Test {
static long result = 1; //此处一定要定义成静态的
public static void main(String[] args) {
long result = 0;
for(int i=1;i<=5;i++){
result = result + fun(i);
}
System.out.println("1! + 2! + 3! + 4! + 5! = " + result);
}
public static long fun(int n){
result = result * n;
return result;
}
}
后枚举几个数,使其和能等于已知数的。
可知 f(x) 这个函数中相邻两项的差是递增的。
有 F(x) = 1! + 2! + 3! + ... + x! >= N > F(x-1) = 1! +2! + 3! +....+ (x-1)!;
这说明能符合条件的最多只有 x 个数;
现在用指针分别标识这些数字;
因为F(x) > N ;故除去 1!(因为 1!最小);
继续循环下去判断,如果新数列大于N的话就除去最小的那个。
如果新数列小于N的话就从小往大判断,移动一个能移动且增量最小的。这就是我证明(1)的原因。
能移动的意思就是如果 k 在数列中 k+1 不在,这就是说 k 能移动;反之不能移动。