HUAWEI 机试题:输出水仙花数

🌈 Scala 实现

题目描述:

  • 所谓的水仙花数是指一个n位的正整数其各位数字的n次方的和等于该数本身
  • 例如例如153=1^3+5^3+3^3,153是一个三位数,153是一个三位数

输入描述:

  • 第一行输入一个整数N,表示N位的正整数N在3-7之间包含3,7
  • 第二行输入一个正整数M,表示需要返回第M个水仙花数

输出描述:

  • 返回长度是N的第M个水仙花数,个数从0开始编号
  • 若M大于水仙花数的个数返回最后一个水仙花数和M的乘积
  • 若输入不合法返回-1

示例

输入:

  • 3
  • 0

输出:

  • 153

说明:

  • 153是第一个水仙花数

输入:

  • 9
  • 1

输出

  • -1

代码:

def main(args: Array[String]): Unit = {

    // 获取输入
    val N = StdIn.readLine().toInt
    val M = StdIn.readLine().toInt

    // 异常情况
    if (N < 3 || N > 7) {
        println("-1")
        return
    }

    // 存放水仙花数
    var sum = 0
    var buffer = new ListBuffer[Int]

    // 计算水仙花
    for (i <- Math.pow(10, N - 1).toInt to Math.pow(10, N).toInt) {
        val elems = i.toString.toList.map(_.toInt - 48)
        var sum = 0
        for (elem <- elems) {
            sum += Math.pow(elem, N).toInt
            println(s"sum = ${sum}")
        }
        if (sum == i) {
            println(s"sum = ${sum}")
            buffer += sum
        }
    }

    // 输出结果
    if (M < buffer.length) {
        println(buffer(M))
    } else {
        println(buffer(buffer.length - 2) * M)
    }
}

 


❤️ END ❤️
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JOEL-T99

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值