阶乘之和

时间:2013-11-03 14:32:40

标签: java sum factorial

所以我需要输出一些像1!+2!...+n!=sum这样的因子,我找到了一种获得单因子的方法,但我不知道如何将它们加在一起。这是我尝试这样做的:

 System.out.println("Ievadiet ciparu");
      Scanner in = new Scanner(System.in);

      n = in.nextInt();
      if ( n < 0 )
         System.out.println("Ciparam jabut pozitivam.");
      else
      {
          while (x>2){
         for ( c = 1 ; c <= n ; c++ )
            fact = fact*c;
         sum=sum+fact;
         n=n-1;
        if (n==0) break;

      }
         System.out.println("Faktorialu summa "+sum);

2 个答案:

答案 0 :(得分:6)

不是有一个循环1-n而是在别处计算每个阶乘,我会在计算阶乘时积累总和 - 即有两个局部变量;一个用于阶乘,一个用于总和:

long factorial = 1, sum = 0;
for (int i = 1; i <= n; i++) {
     factorial *= i;
     sum += factorial;
}

使用n = 5进行测试时,sum153,这是正确的:1 + 2 + 6 + 24 + 120

你的问题是总和是循环之外 - 你只需要像这里的大括号。


此外,您的while循环条件x < 2永远不会改变,因此循环将永远不会执行(如果x > 1)或循环永远不会终止,因为x在循环中没有改变。

答案 1 :(得分:0)

hmmm,我一直在寻找这些代码的递归(通过递归方法调用)版本的搜索

`public static long factorialSum(long n){
        long x = n;
        for(int i = 1; i < n; i++){
            x = (n-i)*(1+x);
        }
        return x;
    }`

如果您更仔细地研究问题,您会发现您可以在线性时间内完成,技巧就在于(n-1)! + n! =(n-1)!*(1 + n),要更深入地了解这一点,我建议加(n-2)!只是看它如何成长。