代码之家  ›  专栏  ›  技术社区  ›  Adan Vivero

在Java中如何求两个给定整数之间的数的和

  •  0
  • Adan Vivero  · 技术社区  · 6 年前

    我需要写一个求两个给定整数之间的数之和的方法。

    例如,调用sumNums(1,3)应该返回6,因为1+2+3=6。

    调用sumNums(3,1)也应该返回6。

    public static int sumNum(int num1, int num2)
    {
       int min = Math.min(num1, num2);
       int max = Math.max(num1, num2);
       int sum = 0;
       for(int i = min; i < max; i++)
       {
           sum += i;
       }
            sum =+ max;
       return sum;
    }
    

    任何其他方法都会有帮助,但如果有一种方法初始化和返回它将有所帮助。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Luis Cabrera Benito    6 年前
    public static int sumNum(int num1, int num2) {
            int min = Math.min(num1, num2);
            int max = Math.max(num1, num2);
            int sum = 0;
            for (int i = min; i <= max; i++) {
                sum += i;
            }
            return sum;
        }
    
        2
  •  2
  •   Ryuzaki L    6 年前

    IntStream

    IntStream.rangeClosed(1, 3).sum();    //6
    

    使用java-7及以下版本

    public static int sumNum(int num1, int num2)
     {
        int min = Math.min(num1, num2);
        int max = Math.max(num1, num2);
        int sum = 0;
        for(int i = min; i <= max; i++)
         {
            sum += i;
          }
    
        return sum;
    }
    
        3
  •  1
  •   forpas    6 年前

    数学很简单:

    public static int sumNum(int num1, int num2) {
       int min = Math.min(num1, num2);
       int max = Math.max(num1, num2);
       return max * (max + 1) / 2 - min * (min - 1) / 2
    }
    
        4
  •  1
  •   Dejan Djokic    6 年前

    return (num1 + num2) / 2.0 * (Math.abs(num1 - num2) + 1);
    
        5
  •  1
  •   Jason    6 年前

    您当前的方法将遇到性能问题,两个整数之间的差距越大。你可以做出一些优化。

    例如,如果有奇数个整数:

    2 + 3 + 4 + 5 + 6 = 4 + 4 + 4 + 4 + 4
    
    1 + 2 + 3 = 2 + 2 + 2
    
    5 + 6 + 7 = 6 + 6 + 6
    

    看到图案了吗?

    2 + 3 + 4 + 5 + 6 = 4 + 4 + 4 + 4 + 4
                      = 5 * 4
                      = (max - min + 1) * ((max + min) / 2)
    

    对于偶数个整数:

    2 + 3 + 4 + 5 = 3.5 + 3.5 + 3.5 + 3.5
                  = 4 * 3.5
    
    5 + 6 + 7 + 8 + 9 + 10 = 7.5 + 7.5 + 7.5 + 7.5 + 7.5 + 7.5
                           = 6 * 7.5
    

    看起来很眼熟!让我们看看前面的公式是否有效:

    2 + 3 + 4 + 5 = (max - min + 1) * ((max + min) / 2)
                  = (5 - 2 + 1) * ((5 + 2) / 2)
                  = 4 * 3.5
    

    公式可以简化为:

    (max - min + 1) * ((max + min) / 2)  =  (max - min + 1) * (max + min) / 2
    

    因此:

    public static int sumNum(int num1, int num2) {
        int min = Math.min(num1, num2);
        int max = Math.max(num1, num2);
        return (max - min + 1) * (max + min) / 2;
    }
    
        6
  •  0
  •   Paul Renauld    6 年前

    或者用数学方法在固定时间内得到:

    sum = max * (max + 1) / 2 - (min * (min - 1)) /2;
    
        7
  •  0
  •   Laabidi Raissi    6 年前

    Arithmetic progression .
    从开始的条件之和 m n 是由 product m - n +1 )第一项和最后一项之和除以2:

    (max - min + 1)*(min + max)/2
    
        8
  •  0
  •   LeWimbes    6 年前

    和其他人没什么不同,但这是我的解决办法

    public static int sumNum(int num1, int num2) {
        if (num1 > num2) {
            int temp = num2;
            num2 = num1;
            num1 = temp;
        }
        return (num1 + num2) * (num2 + 1 - num1) / 2;
    }