奇数之和

时间:2013-05-02 04:07:24

标签: java

我需要完成一个传递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等。我需要在代码中更改哪些内容?

6 个答案:

答案 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)

  1. 编写一个将数字作为输入的方法,并检查它是否为奇数。如果数字是奇数,它可能返回true,否则它可能返回false(提示:奇数不能被2整除)。

  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 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)生成从{1}到int的{​​{1}}流。

  • max仅保留奇数filter(i->i%2!=0)

  • int来赚取金额。

然后找到正确的值。