求和java中的前N个数

时间:2015-03-09 20:01:13

标签: java

  

您好,我是编程新手,我正在尝试编写一个小程序,它将计算前N个数字的总和。问题是它对偶数不起作用。我还没弄清楚原因。   我的代码如下:

int n = Integer.parseInt(args[0]);
    int sum = (1+n)/2*n;
    System.out.println(sum + " is the sum of first " + n + " numbers");

3 个答案:

答案 0 :(得分:2)

它甚至不适用于n,因为(n+1)/2被截断为int。

这意味着,例如,如果n=4(n+1)/2导致2而不是2.5,那么当您将其乘以n时,您将得到8而不是所需的10。

只需更改操作顺序即可克服此问题。如果你首先将n乘以(n + 1),结果保证是偶数,所以将它除以2将产生正确的答案。

int sum = n*(1+n)/2;

答案 1 :(得分:1)

您使用(1+n)/2进行整数除法。如果您的数字是偶数,那么(1+n)是奇数,除2之前的除法将截断任何小数结果,因此int除以int仍为int 1}}。

首先乘以n,然后除以2。这样可以确保产品在分割前均匀,因此结果是正确的。

int sum = (1+n) * n / 2;

答案 2 :(得分:1)

可以使用((n * (n + 1)) / 2)。但我认为以下内容对于n

的一些额外值没有溢出错误也可以正常工作
if ((n & 1) == 0) {
  sum = ((n >> 1) * (n + 1));
} else {
  sum = (n * ((n + 1) >> 1));
}