您好,我是编程新手,我正在尝试编写一个小程序,它将计算前N个数字的总和。问题是它对偶数不起作用。我还没弄清楚原因。 我的代码如下:
int n = Integer.parseInt(args[0]);
int sum = (1+n)/2*n;
System.out.println(sum + " is the sum of first " + n + " numbers");
答案 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));
}