2017-02-21 10 views
1

나는 간단한 디지털 루팅 기능이있어서 다른 해결책을 물어보고 싶습니다. 여기에 내 첫 번째 아이디어가있다. 더 빠른 기능을 찾도록 도와 줄 수 있습니까?디지털 루팅 기능

 private static int digitalRooting(int inputNumber) 
     { 
      int plurality = 0, 
       digit = 0, 
       temp = 0; 

      while (true) 
      { 
       digit = inputNumber % 10; 

       temp = inputNumber/10; 

       plurality = plurality + digit; 

       if (temp < 10) 
       { 
        plurality = plurality + temp; 
        break; 
       } 

       inputNumber = temp; 
      } 

      return plurality; 
     } 
+2

http://codereview.stackexchange.com/ –

답변

0

나는 for 루프에 while를 돌려 좋습니다. 이 구현은 한 자리 입력에서 더 빠릅니다 (value[0..9] 범위에있는 경우 나머지 %을 계산하지 않음). 그러나 주된 이점은 코드가 terser 이상이고 읽을 수있는이라는 것입니다.

현재 루틴처럼 숫자의 합계를 원한다면 12345 -> 1 + 2 + 3 + 4 + 5 == 15 : 경우

private static int digitalRooting(int value) { 
    int result = 0; 

    for (; value > 9; value /= 10) 
    result += value % 10; 

    return result + value; 
} 

당신이 실제 digital root 예를 들어, 원하는 12345 -> 1 + 2 + 3 + 4 + 5 = 15 = 1 + 5 = 6 :

private static int digitalRooting(int value) { 
    do { 
    int result = 0; 

    for (; value > 9; value /= 10) 
     result += value % 10; 

    value = result + value; 
    } 
    while (value > 9); 

    return value; 
}