Java系列的总和

时间:2019-06-06 14:57:36

标签: java

我正在尝试查找级数的和。如果我得到的数字为“ 5”,而项的编号为“ 4” ...则该级数应为(5 * 6 * 7)+( 6 * 7 * 8)+(7 * 8 * 9)+(8 * 9 * 10)...同样,它必须对术语no进行加法运算。我尝试了这段代码,但输出错误。我哪里出错了?

int num=5,n=4,i,j,res=0,sum=1;
int k=num+1;
for(i=1;i<=num-1;i++)
{
    k=k-1;
    sum=1;
    for(j=1;j<=n;j++)
    {
        sum=sum*k;
        k=k+1;
    }
}
res=res+sum;
System.out.println(res);

我得到的输出是57120,但正确的输出是1770。

3 个答案:

答案 0 :(得分:1)

您的代码

int num=5,n=4,i,j,res=0,sum=1;
int k=num+1;
for(i=1;i<=num-1;i++)
{
    k=k-1;
    sum=1;
    for(j=1;j<=n;j++)
    {
        sum=sum*k;
        k=k+1;
    }
}
res=res+sum;   // This line should be *inside* the previous curly bracket.
System.out.println(res);

设置sum = 1;的作用是在添加下一项之前删除sum的前一个值。如果您已存储先前的值是结果(分辨率),那么这只是一个好主意。所以

res = res + sum;

应在外部 for 循环之内。

由于您只需要乘以k后面的两个数字,就不需要内部的 for 循环。只需写

sum += k * (k + 1) * (k + 2);

请注意速记表达式:

sum += ...的含义与sum = sum + ...

相同

k++;的含义与k = k + 1;

相同

k--;的含义与k = k - 1;

相同

此外,计算机工作起来更快

A < B + 1(减1)

比拟定

A <= B(2个减法加一个逻辑或)。

因此,在逻辑表达式中,我们总是在需要A < B + 1时写A <= B

最后,与没有空格的表达式相比,在变量或字符之间具有空格的表达式更容易读取,即a + 1a+1更为容易

备用代码

int num = 5,
    n = 4,
    k = n,
    i = k,
    res = 0;

for(i = k; i < k + n; i++) // Gives n terms, e.g. k = {num, num + 1, ..., num + n - 1}
{
    res += k * (k + 1) * (k + 2);
    k++;
}
System.out.println(res);

答案 1 :(得分:0)

您可以尝试使用Java 8流解决此问题。

例如:

import static java.util.stream.IntStream.range;

...

int num = 5, n = 4;
int sum1 = range(0, n).map(l -> range(num + l, num + l + 3).reduce(1, (a, r) -> a * r)).sum();
System.out.println(sum1);

打印输出:

1770

说明:

range(0, n) // ensures that the sum operation is executed `n` times.
.map(l -> range(num + l, num + l + 3) // generates sequences of 3 numbers starting from `num` increased by `l`
.reduce(1, (a, r) -> a * r) // calculates the product of the sequences of 3 numbers
.sum() // sums the product of all three numbers

答案 2 :(得分:0)

尝试一下:

int num = 5;
int sum = 0;
int n = 4;
for(int i = 0; i<n ;i++) {
  int ele = 1;
  for (int k = num + i; k < num + i + n - 1; k++) {
     ele *= k;
  }
  sum += ele;
 }
System.out.println(sum);