繁体   English   中英

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

[英]Finding sum of a given range of integers (positive only) in Java

编写一个程序,将 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;
    }
}

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

在此处输入图片说明

由于它只是您应该添加的正数,如果n1为负,则使n1 = 0 找到前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;

    }
}

如果要对 a 到 b 范围内的整数求和(包括;a 和 b 允许为正、负;a<=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));
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM