2017-02-21 2 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

Я предлагаю поворот while в for петли. Эта реализация выполняется быстрее на одном цифровом входе (когда 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; 
} 
Смежные вопросы