2015-03-23 3 views
0

вот мое решение для поиска цифрового корня числа. не просто в целях завершения, цифровой корень:Чистое решение для цифрового корня

"Если взять цифры любого числа и добавить их вместе, а затем добавить цифры получившегося числа вместе, и продолжать делать , что до вас получить одну цифру, эта цифра - это цифровой корень исходного номера ».

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

import java.util.Scanner; 
import java.util.StringTokenizer; 


public class DigialRoot { 

    public static void main(String[] args) { 

     Scanner sc = new Scanner(System.in); 
     System.out.print("Enter a number: "); 
     System.out.println(); 

     String str = sc.nextLine(); 
     String[] numbers = str.split(""); 
     int[] myList = new int[numbers.length]; 
     for(int i=0; i < numbers.length; i++){ 
      myList[i] = Integer.parseInt(numbers[i]); 
     } 
     //add all numbers together 
     int sum = 0;   
     for(Integer x : myList){ 
      sum += x; 
     } 

     //break down and add sum 
     String sumStr = Integer.toString(sum); 
     String[] nums = sumStr.split(""); 
     int[] nxtList = new int[nums.length]; 
     for(int i=0; i < nums.length; i++){ 
      nxtList[i] = Integer.parseInt(nums[i]); 
     } 

     //calculating final result of digital root 
     int result = 0; 
     for(Integer x : nxtList){ 
      result += x; 
     } 

     System.out.println("Original number: " + str); 
     System.out.println("Digital root: " + result); 


    } 

} 
+0

выход существо .. Введите номер: Оригинальный номер: 2424 Цифровой корень: 3 – user3646508

+2

Это, вероятно, будет на codereview.stackexchange, так как вы спрашиваете для общих советов, а не для решения конкретной проблемы. – Sbodd

+0

должным образом отмечен Sbodd – user3646508

ответ

0

Это решение будет работать без каких-либо разбора (кроме преобразования входного сигнала):

int i = number; 

while((i/10) != 0)  //continue, while i has min. 2 digits 
{ 
    int sum = 0; 

    while(i != 0){   //while not all digits have been processed 
     sum += (i % 10); //add next digit 
     i /= 10;   //remove last digit 
    } 

    i = sum; 
} 
0

Один из самых простых вещей, которые вы можете сделать, чтобы реорганизовать ваше решение, чтобы переместить логику во внешний метод и называть его рекурсивно. Это может закончить тем, что что-то вроде этого:

private int reduce(int number) { 
    // reduction logic here 
    return number < 10 ? number : reduce(number); 
} 

public int main(String [] args) { 
    Scanner sc = new Scanner(System.in); 
    System.out.print("Enter a number: "); 
    System.out.println(); 

    System.out.println(reduce(sc.nextInt())); 
} 
Смежные вопросы