在Java中查找给定范围的整数(仅为正数)的总和

时间:2016-09-18 06:23:02

标签: java integer formula

编写一个程序,将所有正数从n1加到n2,包括两者,并将其存储在变量n中。你的程序应该打印消息“n2 - n1数之和”,然后是总和(n)的值。

现在这是我的代码:

/ *在这里写下您的代码* /

import java.util.Scanner;
class NumSum{
    public static void main(String args[]){
       int n=0;           
       System.out.println("The sum of n2-n1 numbers is "+sum(n));
    }
    public static int sum(int n){
         int n1,n2;

         Scanner sc=new Scanner(System.in);
         n1=sc.nextInt();
         n2=sc.nextInt();
         int a=n1;
         n=n2-n1+1;
         int d=1;
         int x=0;
         //if(n1>0&&n2>0){
           // for(int i=n1;i<=n2;i++){
           //     n+=i;
           // }
         //}else 
         if(n1<0&&n2>0){
            x=n*(2*a+(n-1)*d)/2;               
         }else if(n1>0&&n2>0){
            x=n*(2*a+(n-1)*d)/2;
         }else if(n1<0&&n2<0){
            x=0;
         }else if(n1>0&&n2<0){
            x=0;
         }
         return x;
    }
}

但它不接受上述问题中给出的测试用例? 有人可以帮忙吗?

enter image description here

2 个答案:

答案 0 :(得分:-1)

由于您只应添加正数,因此如果n1 = 0为负数,请设为n1。找到第一个n数字之和的公式为(n^2+n)/2。  在应用公式之前,下限(n1)应减少1,因为总和中包含限制。

import java.util.Scanner;
class NumSum{
    public static void main(String args[]){

        System.out.println("The sum of n2-n1 numbers is "+sum());
    }
    public static int sum(){
          int n1,n2;

         Scanner sc = new Scanner(System.in);

        n1=sc.nextInt();
        n2=sc.nextInt();

        int tmp;

        if(n1 > n2)
        {
           tmp = n1;
           n1 = n2;
           n2 = tmp;
        } 

        n1--;

        if(n1<0)
          n1 = 0;
        if(n2<0)
          return 0;


        int sum1 = (n1*n1 + n1)/2;
        int sum2 = (n2*n2 + n2)/2;

        return sum2 - sum1;

    }
}

答案 1 :(得分:-1)

如果你想总结a到b范围内的整数(包括在内; a和b允许为正,负; a&lt; = b),请将其视为系列:

    a+0, a+1, a+2, .... a+k (b is conviniently termed as a+k)

部分可以概括为:

    (k+1)*a + k(k+1)/2

消除k,给出公式:

    [(b-a+1)(a+b)]/2

当b> a时,您需要交换a和b。

小心java的整数除法。如果您有此处未涉及的其他例外,请修改公式。

class NumSum {
   public static int sum_range(int a, int b) {
      if (a>b) return(sum_range(b,a));
      return(((b-a+1)*(a+b))/2);
   }

   public static void main(String args[]) {
      int i=Integer.parseInt(args[0]);
      int j=Integer.parseInt(args[1]);
      System.out.println("Sum: " + sum_range(i,j));
   }
}