在范围中添加整数不适用于负数

时间:2018-07-20 16:15:29

标签: java algorithm sum

我正在尝试执行此练习:

  

编写一个程序,询问用户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;
    }

例如

  1. 使用n = -1m = 1返回sum = 1
  2. 使用n = -5m = 5返回sum = 15
  3. 使用n = 5m = -5返回sum = -10。 这些都应该return 0

例如

  1. 使用n = -2m = 3返回sum = 6
  2. 使用n = -2m = 4返回sum = 10

问题出在for (int i = 1; i <= n - 1; i++),特别是i <= n - 1上,因为当n-1 <= 0不能运行时。我只是想不出办法了。

3 个答案:

答案 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做同样的事情。