打印 n!
的结果(1 <= n <= 100)。注意:当 n > 20
时 64 位的 Int
将无法直接存储结果。
思路
- 将大数字用 数组 形式表示。比如 987 使用 [9,8,7] 代替。
- 每一位乘以 n,再进行进位操作,得到新数组。
let nums = [9, 8, 7] let tmpNums = nums.map { $0 * 2 }
[18, 16, 14] -> [18, 17, 4] -> [19, 7, 4] -> [1, 9, 7, 4]
print(tmpNums.map(String.init).joined())
|
解答项目
func extraLongFactorials(n: Int) -> Void { guard n > 0 else { return } var result: [Int] = [1] for index in 1...n { let tmpNums = result.reversed().map { $0 * index } var carryNum = 0 result = [] tmpNums.forEach { let tmpNum = $0 + carryNum carryNum = tmpNum / 10 result.append(tmpNum % 10) } while carryNum > 0 { result.append(carryNum % 10) carryNum /= 10 } result = result.reversed() } print(result.map(String.init).joined()) }
|
References
– EOF –