🌈 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 ❤️