美文网首页
Kotlin中函数式编程API(8)求阶乘和计算水仙花数

Kotlin中函数式编程API(8)求阶乘和计算水仙花数

作者: 狼性代码人 | 来源:发表于2019-06-14 11:09 被阅读0次
    • 求阶乘
    • 计算水仙花数

      前面介绍了很多函数,下面两个需求使用前面的函数将变得简单清晰。

    一、求阶乘

      求阶乘通常会使用递归函数调用,这比较影响性能,可以通过前面介绍的 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
    

    相关文章

      网友评论

          本文标题:Kotlin中函数式编程API(8)求阶乘和计算水仙花数

          本文链接:https://www.haomeiwen.com/subject/gtxufctx.html