如何找到Java中两个给定整数之间的数字总和

时间:2019-03-06 22:21:58

标签: java numbers

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

例如,调用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;
}

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

8 个答案:

答案 0 :(得分:2)

诚实地使用java-8 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;
}

答案 1 :(得分:2)

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 :(得分:1)

这是(简单的)数学运算

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
}

答案 3 :(得分:1)

您可以执行以下操作:

def s_num(nums):
    digits = [int(digit) for digit in str(nums) ]
    return sum(digits)

s_num = sorted(numbers,key=s_num)
print(s_num)```

答案 4 :(得分:1)

两个整数之间的差距越大,您当前的方法就会遇到性能问题。您可以进行优化。

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

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;
}

答案 5 :(得分:0)

或使用数学方法在恒定时间内获取它:

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

答案 6 :(得分:0)

我不知道您是否想学习Java(迭代和流),或者您是否正在寻找解决实际问题的好方法。在后一种情况下,您的问题是算术级数Arithmetic progression的总和。
ks.LastPrice_v1 = float(ks.LastPrice) m开始的项的总和由项数(即n)的product以及第一项和最后一项的总和得出全部除以2:

m - n +1

答案 7 :(得分:0)

与其他人没有太大区别,但这是我的解决方案

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;
}