2013-05-02 10 views
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, и т. д. Что мне нужно изменить в моем коде?

+0

Что такое max ?? и почему max/= 10 ?? – aymankoo

+0

Ваш алгоритм не выполняет то, что вы указали в своей проблеме. В настоящее время он пытается получить сумму всех нечетных цифр, которые содержат номер. Проверьте свой алгоритм. –

ответ

4

Если вы пытаетесь получить s сумму нечетного числа, вам не требуется делать цифру = max% 10; или max/= 10;

Смотрите комментарии в коде, скажем, макс = 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 
} 
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--; 
    } 
    } 
10

почему бы просто не сделать это легкий путь , Найдите число нечетных чисел в диапазоне от 1 до max, а затем выполните квадрат. Это может помочь вам http://www.wikihow.com/Add-a-Sequence-of-Consecutive-Odd-Numbers

+2

+1: Не дает прямого решения OP вместо этого дает информацию, чтобы OP мог решить домашнюю работу. –

0
  1. Напишите метод, который будет принимать ряд в качестве входных данных, и будет проверять, является ли это странным. Если число нечетное, оно может возвращать true, иначе оно может возвращать значение false (HINT: нечетные числа не делятся на 2).

  2. От вашего текущего метода, петля от 1 до max. Передайте каждый номер этому методу, чтобы проверить, не странно или нет. Если да, добавьте его в сумму.

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); 
    } 
} 
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) для генерации потока int от 1 до max.

  • filter(i->i%2!=0) держать только нечетные int

  • sum() сделать сумму.

Затем вы найдете правильные значения.

+0

Я думаю, что они должны написать собственную функцию – danielspaniol

Смежные вопросы