1

我需要完成一个方法,该方法将 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 等。我需要在我的代码中进行哪些更改?

4

6 回答 6

10

为什么不简单地做到这一点。找出从 1 到范围内的奇数个数,max然后将其平方。这可能会对您有所帮助http://www.wikihow.com/Add-a-Sequence-of-Consecutive-Odd-Numbers

于 2013-05-02T04:14:37.163 回答
4

如果你想得到奇数的总和,你不需要做 digit = max%10; 或最大值/= 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
}
于 2013-05-02T04:12:56.967 回答
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--;
  }
  }
于 2013-05-02T04:14:04.880 回答
0
  1. 编写一个将数字作为输入的方法,并检查它是否为奇数。如果数字是奇数,它可能返回真,否则它可能返回假(提示:奇数不能被 2 整除)。

  2. 从您当前的方法中,从 1 循环到max. 将每个数字传递给此方法以检查它是否为奇数。如果是,则将其添加到总和中。

于 2013-05-02T04:33:28.040 回答
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);
    }
}
于 2013-05-02T04:40:39.287 回答
0

要使奇数的总和从1max,您可以使用 Java 8 Streams

  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)生成int从 1 到的流max

  • filter(i->i%2!=0)只保持奇数int

  • sum()做总和。

然后,您会找到正确的值。

于 2015-06-07T13:06:19.977 回答