我想创建一个程序来查找序列中直到20的所有数字的阶乘和。 我必须在s = 1 +(1 * 2)+(1 * 2 * 3)+ ...(1 * 2 * 3 ... 20)中找到's'。 我尝试了一个程序,但是没有用。我正在使用BlueJ IDE。
int a =1;
int s = 0;
for(int i = 1; i <= 10; i++)
{
while (i >0)
{
a = a * i;
i--;
}
s = s+a;
}
System.out.println(s);
编译器没有显示任何错误消息,但是当我运行程序时,JVM(Java虚拟机)会继续加载,并且不会显示输出屏幕。
答案 0 :(得分:0)
您应该在内部循环中使用其他循环变量名称,并且还需要使用long
来存储和。实际上,我首先会写一个乘以该系列中一个数字的方法。喜欢,
static long multiplyTo(int n) {
long r = 1L;
for (int i = 2; i <= n; i++) {
r *= i;
}
return r;
}
然后,您可以调用该函数并通过一个简单的循环计算总和。喜欢,
long sum = 0L;
for (int i = 1; i <= 20; i++) {
sum += multiplyTo(i);
}
System.out.println(sum);
我明白了
2561327494111820313
答案 1 :(得分:0)
使用流:
long s = LongStream.rangeClosed(1, 20)
.map(upper -> LongStream.rangeClosed(1, upper)
.reduce(1, (a, b) -> a * b))
.sum();
System.out.println(s);
打印2561327494111820313
答案 2 :(得分:0)
您可以尝试以下一种方法:
public class Main
{
public static void main (String[]args)
{
int fact = 1;
int sum = 0;
int i, j = 1;
for (i = 1; i <= 20; i++)
{
for (j = 1; j <= i; j++)
{
fact = fact * j;
}
sum += fact;
System.out.println ("sum = " + sum);
fact = 1;
}
}
}
始终提供适当的变量名称,并尝试避免在不同的地方使用相同的变量,即您在外部和内部循环中都使用了变量i,这不是一个好习惯。