[英]Can a given number be written as a sum of two or more consecutive positive integers?
[英]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.