我需要完成一个传递int(max)作为参数的方法,并返回从1到max(包括)的奇数整数之和。
例如,sumOfOddIntegers(5)
必须返回9.即1 + 3 + 5 = 9
我的尝试是这样的:
int sumOfOddIntegers(int max) {
int sumOdd = 0;
int digit;
while (max >= 1) {
digit = max%10;
if (digit%2 == 1)
sumOdd += digit;
max /= 10;
}
return sumOdd;
}
但它不适用于某些输入,例如5,9等。我需要在代码中更改哪些内容?
答案 0 :(得分:10)
为什么不以简单的方式做到这一点。找出1到max
范围内的奇数个数,然后将其平方。这可能会对您有所帮助http://www.wikihow.com/Add-a-Sequence-of-Consecutive-Odd-Numbers
答案 1 :(得分:4)
如果你想得到奇数的和,你不需要做数=最大%10;或者max / = 10;
请参阅代码中的注释,比如说max = 98
/****FIRST RUN****/
// digit = 98%10 = 8
digit = max%10;
// 8 % 2 == 0
if( digit % 2 == 1 )
sumOdd += digit;
// max = 98/10 = 9
max/= 10;
/****SECOND RUN****/
// digit = 9%10 = 9
digit = max%10;
// 9 % 2 == 1
if( digit % 2 == 1 )
// sumOdd = 1
sumOdd += digit;
// max = 9/10 = 0
max/= 10;
您的输出为1,这不是您所期望的。 因此,为了计算奇数的和,您可以通过以下方式继续:
for(int i = 1; i <= max; i+= 2)
{
oddSum += i; // assuming oddSum = 0, and max is > 0
}
答案 2 :(得分:0)
这是一些代码
void calculateOdd(int max) {
int total = 0;
for (int i=max; i>0; i--) {
if ( (i % 2) != 0 ) total+=i;
}
}
或
void calculateOdd(int max) {
int total = 0;
if ( (max % 2) == 0 ) max--;
for (int i=max; i>0; i--) {
total+=i;
i--;
}
}
答案 3 :(得分:0)
编写一个将数字作为输入的方法,并检查它是否为奇数。如果数字是奇数,它可能返回true,否则它可能返回false(提示:奇数不能被2整除)。
从您当前的方法,从1循环到max
。将每个数字传递给此方法以检查它是否是奇数。如果是,请将其添加到总和中。
答案 4 :(得分:0)
可能有帮助:
import java.util.*;
class oddsum {
public static void main(String args[]) {
int sumOdd = 0;
int digit;
System.out.println("Please Enter Number.");
Scanner in = new Scanner(System.in);
int i = Integer.parseInt(in.nextLine());
int j;
for(j =1; j<=i; j+=2) {
sumOdd += j;
}
System.out.println(sumOdd);
}
}
答案 5 :(得分:0)
要将奇数整数从1
加到max
,可以使用Java 8 Stream
s
public static int sumOddIntegers(int max){
if(max<1) return 0;
return IntStream.rangeClosed(1, max).filter(i -> i%2 != 0).sum();
}
使用以下方法调用:
IntStream.rangeClosed(1, max)
生成从{1}到int
的{{1}}流。
max
仅保留奇数filter(i->i%2!=0)
int
来赚取金额。
然后找到正确的值。