- 求阶乘
- 计算水仙花数
前面介绍了很多函数,下面两个需求使用前面的函数将变得简单清晰。
一、求阶乘
求阶乘通常会使用递归函数调用,这比较影响性能,可以通过前面介绍的 reduce
函数实现。
fun factorial(n: Int): Int = if (n < 1)
throw UnsupportedOperationException("n<1 can't be reduced.")
else
(1..n).reduce { acc, i -> acc * i }
fun main(args: Array<String>?) {
try {
println("1! = ${factorial(1)}")
println("2! = ${factorial(2)}")
println("5! = ${factorial(5)}")
println("-10! = ${factorial(-10)}") // 1️⃣
} catch (e: Exception) {
println(e)
}
}
// 输出结果
2019-06-14 10:42:23.157 I: 1! = 1
2019-06-14 10:42:23.157 I: 2! = 2
2019-06-14 10:42:23.157 I: 5! = 120
2019-06-14 10:42:23.158 I: java.lang.UnsupportedOperationException: n<1 can't be reduced.
函数 factorial
对输入的参数做了一定的限制,防止用户输入不合法参数值,代码第1️⃣行传入非法参数 -10,这时会抛出异常 n<1 can't be reduced.
,通过 try catch
捕获并打印异常信息。
二、计算水仙花数
水仙花数是一个三位数,这个数的三个数位上的数 各自立方之和等于三位数本身。
fun narcissistic() = IntArray(1000) { it } // 初始化数据
.filter { it > 99 } // 筛选出所有3位数
.filter { // 各个数位的立方和等于本身
val b = it / 100
val s = (it - b * 100) / 10
val g = it - b * 100 - s * 10
b * b * b + s * s * s + g * g * g === it
}.forEach { println(it) }
fun main(args: Array<String>?) {
narcissistic()
}
// 输出结果
2019-06-14 11:06:45.374 I: 153
2019-06-14 11:06:45.374 I: 370
2019-06-14 11:06:45.374 I: 371
2019-06-14 11:06:45.374 I: 407
网友评论