日期:2014-05-20  浏览次数:20742 次

(笔试题)求n!

rt
(笔试题)求n!

------解决方案--------------------
int t = 1;
for(int i=2; i<n; i++)
t = t * i;
System.out.println(t);

n如果过大就会溢出
------解决方案--------------------
Java code

public long getNNNN(int n) {
  long result = 1;
  for (int i=n; i>0; i--) {
     result = result * i;
  }
  return result;
}

------解决方案--------------------
Java code

public class Test {
  public double getN(double n) {
    if (n == 1)
      return 1;
    else
      return (n * getN(n - 1));
  }
  public static void main(String[] args) {
    double a = 10;
    System.out.println(getN(a));
  }
}

------解决方案--------------------
以下是递归实现:
分析如下;
n!=n*(n-1)!
(n-1)!=(n-1)*(n-2)!
....
0!=1
可以得出:
Java code

public static int func(int i) {
        if (i == 0 || i == 1) {
            return 1;
        }
        return i * func(--i);
    }

------解决方案--------------------
public long factorial(int num) {
long result = 1L;
while(num > 1) {
result *= num--;
}
return result;
}
------解决方案--------------------
能不递归,就不递归,看来都知道要--啊... ...
------解决方案--------------------
递归很方便:
public class Test{
public int getN(int n){
if(n==0 || n==1) return 1;
return n*getN(n-1);
}
public static void main(String[] args){
int result = new Test().getN(5);//例如N=5
System.out.println(result);
}
}
------解决方案--------------------
n不能大于17,超过17int就溢出,需要先判断
if(n<0 && n>17)
{}
else
{}
超过17,用BigDecimal
------解决方案--------------------
探讨
public long factorial(int num) {
long result = 1L;
while(num > 1) {
result *= num--;
}
return result;
}

------解决方案--------------------
给出一段简单的Ruby代码,顺便搞定18!
a, n = 1, 18
(2..n).each{|i| a *= i}
p a
------解决方案--------------------
呵呵,方法这么多
------解决方案--------------------
真正的方法不是这么做的,需要用的数值方法中的一些公式,也是说用高等数学的里面的一些知识来求。

------解决方案--------------------
4楼正解
------解决方案--------------------
为什么没有一个人给出不限定n范围的解答?
结果溢出?溢出就没有结果了?程序就算不出来了?计算机的功能也太少点了吧……
一定要用int/long来存放最终结果?
没有人给出溢出后的解决方案
悲哀啊……那么多答案……
------解决方案--------------------
如果只能求道18,还不如把结果都算出来,放数组里面呢!
------解决方案--------------------
探讨
给出一段简单的Ruby代码,顺便搞定18!
a, n = 1, 18
(2..n).each{ ¦i ¦ a *= i}
p a

------解决方案--------------------
看惯了java看ruby很别扭啊
------解决方案--------------------
用递归是硬道理

Java code
public long getEstate(int num){
  if (num <= 1)
     return 1;
  else 
     return num * getEstate(num - 1);
}