2013-09-02 7 views
5

Здравствуйте, я новичок в Java и был вопрос о Loops,Loops, начинающий

вопрос в книге запрашивает сумму всех нечетных разрядов п. (Например, если n равно 32677, сумма будет равна 3 + 7 + 7 = 17.

Я не могу понять, как это кодировать, я ищу кого-то, кто поможет мне. этот код, а первый шаг, но я не знаю, как закончить это или есть ли у меня это правильно или неправильно.

Любая помощь будет оценена,

public class sumOfOddsInNumber 
{ 
    public static void main(String[] args) 
    { 

     int n = 0; 
     String value = String.valueOf(number); 
     int length = value.length(); 

     while (n < length) 
     { 
      ... //Idk if this the right first step, how do I start it? where do i go? 
+0

Это не плохо, как первый шаг, но там, где это определенное число? Посмотрите на метод charAt и подумайте об использовании оператора mod (%), чтобы определить, является ли цифра нечетной или четной. – JohnMark13

+0

Ach! Я совершенно неправильно понял этот вопрос. Я думал, что вы пытаетесь суммировать каждое нечетное число от 1 до n! К сожалению! – Airhead

ответ

3

Я не собираюсь чтобы дать вам полное решение, но вот что вам нужно знать, чтобы сделать это правильно, и если вы их понимаете, проблема будет довольно простой:

Если у вас есть целое число к, вы можете преобразовать его в строку с:

String s = String.valueOf(k); 

Это позволит более просто цикл по отдельным символам строки, которые представляют цифры номера. Затем вы можете перебирать символы по одному с

char c = s.charAt(0); 

Где 0 может быть переменной индекс цикла, который может быть зациклена от первого символа (индекс 0) до последнего (индекс s.length - 1 для строки s)

Тогда это превратит их обратно в целое, что является простым, а затем проверяет, четные или нечетные. Стандартный способ сделать это - с модулем.

int k = 7; 
if (k % 2 == 0) //k is even 
else //k is odd 

Это работает, потому что любое число mod 2 вернет 0, только если это четное число. В противном случае он будет возвращать 1.

+0

* вы можете преобразовать его в строку со * ...? –

+0

@LuiggiMendoza Исправлено, спасибо, что заметили это. – Kon

2
public static int sumOfOddsInNumber(int n) 
{ 
    String valueString = String.valueOf(n); 
    int sum = 0; 

    for (int i = 0; i < valueString.length(); i++) 
    { 
     int value = Integer.parseInt(valueString.substring(i, i + 1)); 
     if (value % 2 != 0) 
      sum += value; 
    } 

    return sum; 
} 
4

Этот код может сделал трюк без использования какой-либо строки:

int sum= 0; 
int digit=0; 
int number= your_value; 
while (number > 0) 
{ 
    digit=number % 10; // we look at the "last" digit 
    if (digit %2 == 1) // odd digiti 
    { 
     sum+=digit; 
    } 
    number/=10; 
} 
2

я написал комментарии для лучшего понимания, попытайтесь решить логику самостоятельно, это будет более полезно :)

public class SumOddMain { 

    public static void main(String args[]) { 
     String s = "1234"; 

     //Find the length of String 
     int len = s.length(); 

     //Convert data type String into int 
     int num = Integer.parseInt(s); 

     int mod; //Modulus 
     int od = 0, even = 0; 

     for(int i = 0; i < len ; i++) { 
      //Separates each digit from given number 
      mod = num % 10; 
      num = num/10; 

      if(mod % 2 == 0) { //Determines if the number is odd or even 
       even = even + mod; //Addition of even numbers 
      } else { 
       od = od + mod; //Addition of odd numbers 
      } 
     } 
     System.out.println("Sum of even numbers is "+even); 
     System.out.println("Sum of odd numbers is " + od); 
    } 
} 
1

Это то, что я придумал:

package sum; 

import java.util.Scanner; 
public class Sum { 


    public static void main(String[] args) { 
    Scanner input=new Scanner(System.in); 

    String number=""; 
    int a=0, total=0; 
    boolean even=false; 

    System.out.println("Enter a number"); number=input.nextLine(); 

    for (int counter=0; counter<number.length(); counter++){ 
    a=Integer.parseInt(number.substring(counter,counter+1)); 
    if (a%2!=0||a==1){ 
     even=false; 
     total+=a; 
    } 
    }System.out.println("The sum is "+total); 




} 
} 

Сначала вы получаете номер от пользователя, затем программа проходит через каждое число в строке (номере) и отделяет их. Это представлено переменной «a». Теперь вы можете проверить a, чтобы убедиться, что число четное или нет, используя модульное деление (если% 2 не равно 0, а не равно). Наконец, вы добавляете четные числа вместе с общей переменной, и она отобразит ответ!

0
public int SumOfDigits(int num) 
{ 
    if (num < 10) return num; 
    return num % 10 + SumOfDigits(num/10); 
} 

это не использует строку, и это рекурсивный (это C#, но я думаю, что он также будет работать на Java, так как они в значительной степени похожи)

Update:

 public int SumOfOddDigits(int num) 
     { 
      int rem = num % 10; 
      if (num < 10) 
      { 
       if (rem % 2 != 0) 
        return num; 
       return 0; 
      } 
      if (rem % 2 != 0) 
       return rem + SumOfOddDigits(num/10); 
      return SumOfOddDigits(num/10); 
     } 
+0

Как это пропустить четные цифры? –

+0

@AnindyaDutta Я разместил обновление, посмотрю – David47

+0

да это выглядит хорошо. –

0

Немного эффективный метод может использовать побитовый оператор вместо%, чтобы найти, является ли число нечетным.

int sum(int n) { 
    int sum=0, rem; 
    while(n>0) { 
     rem = n%10; 
     if (rem&1 == 1) 
      sum+=rem; 
     n/=10; 
    } 
    return sum; 
} 

Обратите внимание, однако, что этот метод будет работать только в случае, если входной сигнал n является положительным числом.

1

Я думаю, что лучший подход - использовать числовое решение, отправленное julien.

Если вы хотите, чтобы остаться со строкой, здесь другой подход:

String numString = String.valueOf(number); 
int tmp=0; 
int sum=0; 
for(int i; i< numString.length; i++) { 
    tmp = Character.getNumericValue(element.charAt(i)); 
    if (tmp %2 != 0) 
     sum+= tmp; 
}