У меня интересный вопрос, речь идет не о программировании, может быть, о математике.
Это простой код на Scala - факторный номер
def smartFactorial(number: Int): BigInt = {
def factorial(number: Int, accumulator: BigInt) : BigInt = {
if (number <= 1) accumulator
else
factorial(number - 1, number * accumulator)
}
factorial(number, 1)
}
println(smartFactorial(1000))
Итак, когда я запускаюэтот код впервые я получил результат с большим количеством нулевых цифр на конце.Во-первых, я подумал «это ошибка» и попытался запустить этот код с другими параметрами (также более 1000) - результаты были одинаковыми.После нескольких поисков по этому вопросу я совершенно не могу решить: Почему итоговое число факториалов имеет слишком много нулевых цифр на конце и как мы можем это объяснить?
Кроме того, янаписал небольшой скрипт для вычисления количества конечных нулевых цифр на нескольких входных числах
def countOfEndZeros(number: String): Int = {
def countOfEndZeros(number: String, index: Int, accumulator: Int) : Int = {
if (number.charAt(index) != '0') accumulator
else if (index - 1 < 0) accumulator
else countOfEndZeros(number.substring(0, index), index - 1, accumulator + 1)
}
countOfEndZeros(number, number.length - 1, 0)
}
val countExamples = 1000
val inputs: Stream[Int] = Stream.from(1)
inputs
.map(i => (i, factorial(i).toString()))
.map(t => (t._1, countOfEndZeros(t._2)))
.take(countExamples)
.foreach(println)
Интересный факт: если вы запустите последний скрипт, вы увидите, что на 5конец, но все остальные цифры представлены.Я не могу понять это или объяснить это;может быть, есть математические теоремы, которые могут это объяснить?