Я работал над проблемой ранга хакера, где мне нужно напечатать число, которое является факториалом 25. Вот код, который я использовал.
func extraLongFactorials(n: Int) -> Void {
let factorialNumber = factorial(number: n)
var arrayForStorage: [Int] = []
var loop = factorialNumber
while (loop > 0) {
let digit = loop.truncatingRemainder(dividingBy: 10)
arrayForStorage.append(Int(digit))
loop /= 10
}
arrayForStorage = arrayForStorage.reversed()
var returnString = ""
for element in arrayForStorage {
returnString = "\(returnString)\(element)"
}
print(returnString)
}
func factorial(number: Int) -> Double {
if number == 0 || number == 1 {
return 1
} else if number == 2 {
return 2
} else {
return Double(number) * factorial(number: number - 1)
}
}
Но когда я пытаюсь напечатать номер факториала, он просто печатает 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015511210043330982408266888
, когда должен печатать 15511210043330985984000000
.
Я думаю, что метод Double number truncatingRemainder(dividingBy: 10)
не дает мне точного числа остатка. Потому что, когда я попытался напечатать truncatingRemainder 15511210043330985984000000, он выдал мне 8
. Вот код.
let number: Double = 15511210043330985984000000
print(number.truncatingRemainder(dividingBy: 10))
Итак, в конце концов я не нашел решения проблемы, как разделить большое число и добавить его в массив. С нетерпением ждем решения.