您需要检查第一个数字是偶数还是奇数,因为如果是偶数,它将对偶数而不是奇数求和,因为在每次迭代之后您都将“ i”加2。尝试在for循环之前的下面添加行。
if(num1%2==0){num1++);
,
说明
如果您以偶数开头,则循环将对偶数求和。
检查您的代码:
for (int i = num1; i <= num2; i += 2)
假设num1
是偶数,例如4
。然后,循环以i = 4
开始。然后继续+= 2
,最后得到6,8,10,...
,即偶数。
解决方案
您只需在循环之前修补num1
即可对其进行修复。
// Put this before your loop
if (num1 % 2 == 0) { // checks if num1 is even
num1++;
}
这样,您将从5
开始,然后得到7,9,11,...
。
,
致sum a range of numbers:
取第一个数字和最后一个数字的平均值,然后乘以数字。
但是,首先,您需要确保上下限是奇数。这实际上是问题代码的问题所在。
完成后,计算平均数和数字数:
public static long sumOddNumbers(int min,int max) {
long minOdd = (min % 2 == 1 ? min : min + 1); // Round up to odd number
long maxOdd = (max % 2 == 1 ? max : max - 1); // Round down to odd number
if (minOdd > maxOdd)
return 0;
// average = (minOdd + maxOdd) / 2
// count = (maxOdd - minOdd) / 2 + 1
// sum = count * average
return ((maxOdd - minOdd) / 2 + 1) * (minOdd + maxOdd) / 2;
}
测试
System.out.println(sumOddNumbers(3,11)); // prints: 35
System.out.println(sumOddNumbers(4,20)); // prints: 96
,
这可以通过数学公式轻松完成。但是根据您的问题,我想您想使用一个循环,所以到这里去。
奇数的低位设置为1。
如果数字已经是奇数,则重置该位无效,因此仍然是奇数。
但是将该位设置为偶数会使它成为下一个更高的奇数。
因此,请使用按位或运算符。
3 | 1 = 3
4 | 1 = 5
并执行以下操作:
int start = 4;
int end = 20;
int sum = 0;
for (int i = (start | 1); i <= end; i += 2) {
sum += i;
}
System.out.println(sum);
如果要在Java 8+中使用流,则可以通过这种方式进行。
int sum = IntStream.rangeClosed(start,end).filter(i -> i & 1 == 1).sum();
我正在谈论的公式是使用简单的序列求和得出的。
对于整数,start
和end
start |= 1; // ensure start is next odd number
end = (end | 1) - 2;// ensure end is last odd - 2
int sum = ((start + end) * ((end - start) / 2 + 1)) / 2;
,
如果两个数字都是自然数,则可以应用公式:
Sum of odd natural numbers from m to n = sum of natural odd numbers up to n - sum of natural odd numbers up to m
= (n/2)^2 - (m/2)^2
where n is an even number or the next even number in case it is an odd number
在程序中:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print("#1: ");
int num1 = Math.abs(s.nextInt());
System.out.print("#2: ");
int num2 = Math.abs(s.nextInt());
System.out.println("Sum of natural odd numbers from "+num1+" to "+num2+" = "+sumNaturalOddOfRange(num1,num2));
num1 = 5;
num2 = 15;
System.out.println("Sum of natural odd numbers from "+num1+" to "+num2+" = "+sumNaturalOddOfRange(num1,num2));
num1 = 5;
num2 = 16;
System.out.println("Sum of natural odd numbers from "+num1+" to "+num2+" = "+sumNaturalOddOfRange(num1,num2));
num1 = 6;
num2 = 15;
System.out.println("Sum of natural odd numbers from "+num1+" to "+num2+" = "+sumNaturalOddOfRange(num1,num2));
}
static int sumNaturalOddOfRange(int num1,int num2) {
if(num2%2==1)
num2++;
return (int)(Math.pow(num2 / 2,2) - Math.pow(num1 / 2,2));
}
}
示例运行:
#1: 10
#2: 20
Sum of natural odd numbers from 10 to 20 = 75
Sum of natural odd numbers from 5 to 15 = 60
Sum of natural odd numbers from 5 to 16 = 60
Sum of natural odd numbers from 6 to 15 = 55
,
**Here is the answer**
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print("#1: ");
int num1 = s.nextInt();
System.out.print("#2: ");
int num2 = s.nextInt();
int sum = 0;
if (num1%2==0) {
num1++;
}
for (int i = num1; i <= num2; i++) {
sum +=i;
}
System.out.print(sum);
}
本文链接:https://www.f2er.com/3048370.html