编写一个程序,将所有正数从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;
}
}
但它不接受上述问题中给出的测试用例? 有人可以帮忙吗?
答案 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));
}
}