所以我需要输出一些像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);
答案 0 :(得分:6)
不是有一个循环1-n而是在别处计算每个阶乘,我会在计算阶乘时积累总和 - 即有两个局部变量;一个用于阶乘,一个用于总和:
long factorial = 1, sum = 0;
for (int i = 1; i <= n; i++) {
factorial *= i;
sum += factorial;
}
使用n = 5
进行测试时,sum
为153
,这是正确的: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)!只是看它如何成长。