我正在尝试执行此练习:
编写一个程序,询问用户N和M,然后将 N和M之间的整数,使用公式
SUM(N to M) = SUM( 1 to M ) - SUM( 1 to N-1 )
我可以将其用于正数,但不能负数。
static int method2(int n, int m) {
int sum = 0;
int sum2 = 0;
for (int i = 1; i <= m; i++) {
sum = sum + i;
}
for (int i = 1; i <= n - 1; i++) {
sum2 = sum2 + i;
}
System.out.println("sum: " + sum + ", sum2: " + sum2);
return sum = sum - sum2;
}
例如
n = -1
,m = 1
返回sum = 1
。 n = -5
,m = 5
返回sum = 15
。n = 5
,m = -5
返回sum = -10
。
这些都应该return 0
。例如
n = -2
,m = 3
返回sum = 6
。n = -2
,m = 4
返回sum = 10
。问题出在for (int i = 1; i <= n - 1; i++)
,特别是i <= n - 1
上,因为当n-1 <= 0
不能运行时。我只是想不出办法了。
答案 0 :(得分:1)
您的公式
SUM(N to M) = SUM( 1 to M ) - SUM( 1 to N-1 )
对于负值并没有任何意义。如果您放弃了,可以使程序更简单。我们经常从0或1开始for
循环,但这不是必须的。相反,您可以从可能为负的n开始循环:
static int method2(int n, int m) {
int sum = 0;
for (int i = n; i <= m; i++) {
sum = sum + i;
}
System.out.println("sum: " + sum);
return sum;
}
答案 1 :(得分:0)
您总是可以先检查n <0。
然后对负数进行另一个反向循环。
例如
int sum = 0;
if(m < 0){
for(int i = 0; i >= m; i--) {
sum += i;
}
} else {
for (int i = 1; i <= m; i++) {
sum += i;
}
}
答案 2 :(得分:0)
如果您真的必须使用该公式,则可以使用:
for (int i = 1; i <= m; i++) {
以下代码将索引更改为1或-1
for (int i = 1; i <= m; i+=(int)Math.signum(m-1+0.1)) {
(加上0.1使得在m为1的情况下,结果为正而不是0)
Ofc您应该对n做同样的事情。