Я задавался вопрос, почему следующие решения коды на основе операции по модулю не работают при переходе от int
типа к long
типу.Сумма всех цифр для положительного числа типа длинного в Java
Например, 111111111111L
Хотелось бы связаться с нами 12L
.
Как достичь такого же ожидаемого поведения, описанного в следующем вопросе (который работает только для значений типа int)? Sum of all digits for a given Positive Number
Я также сосредоточен на проблемах производительности, поэтому я ищу эффективное решение.
public static long sumTheDigitsVersion1(long inputValue){
long sum = inputValue % 9L;
if(sum == 0){
if(inputValue > 0)
return 9L;
}
return sum;
}
public static long sumTheDigitsVersion2(long inputValue){
return inputValue - 9L * ((inputValue - 1L)/9L);
}
Благодаря
Не надейтесь на ресурсы вне участка в своем запросе. Свяжите их, если хотите, но всегда указывайте соответствующие бит в своем вопросе. –
Почему вы ожидаете '12' в качестве вывода. Этот вопрос, который вы связали, обнаружил ['цифровой корень'] (http://en.wikipedia.org/wiki/Digital_root), который уменьшает число, суммируя цифры, пока вы не получите одну цифру. Таким образом, для '12' он снова будет уменьшен до' 1 + 2 = 3'. –
@dasblinkenlight. '111111111111L' можно считать десятичным? –