Scala输出1000以内的水仙花数
时间: 2024-10-21 19:03:21 浏览: 26
水仙花数是指一个三位数,其各位数字立方之和等于该数本身。例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。
在Scala中,我们可以编写一个函数来找出1000以内的所有水仙花数。以下是简单的实现:
```scala
def findWaterLilyNumbers(n: Int): List[Int] = {
(1 to n).filter(num => num >= 100 && num < 1000) // 只考虑三位数
.map(num => {
val digits = num.toString.map(_.asDigit) // 将数字转换为数组获取每一位
val sumOfCubes = digits.map(_ * _ * _).sum
if (num == sumOfCubes) num else 0 // 如果和等于原数,则返回该数,否则忽略
})
.filter(_ != 0) // 过滤掉不是水仙花数的值
}
val waterLilyNumbersUnder1000 = findWaterLilyNumbers(1000)
waterLilyNumbersUnder1000.foreach(println) // 打印结果
相关问题
编写scala程序,采用函数或方法的方式,分别输出100~999,1000~9999的所有水仙花数
水仙花数是一种特殊的数字,它的各位数字立方之和等于它本身。例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。在Scala中,我们可以编写函数来找出指定范围内的水仙花数。这里我会提供两个函数,一个用于检查单个数字是否是水仙花数,另一个用于生成并输出范围内的所有水仙花数。
首先,我们定义一个名为`isArmstrongNumber`的函数,判断给定的整数是否为水仙花数:
```scala
def isArmstrongNumber(num: Int): Boolean = {
val digits = num.toString.map(_.asDigit).toList
val sumOfCubes = digits.map(_ * _ * _).sum
sumOfCubes == num
}
```
接下来,创建一个名为`findAndPrintArmstrongNumbersInRange`的函数,用于查找并打印指定范围内的水仙花数:
```scala
def findAndPrintArmstrongNumbers(start: Int, end: Int): Unit = {
for (i <- start to end) {
if (isArmstrongNumber(i)) {
println(s"$i 是一个水仙花数")
}
}
}
```
现在,我们可以调用这个函数来找到并打印100到999和1000到9999之间的水仙花数:
```scala
findAndPrintArmstrongNumbers(100, 999)
findAndPrintArmstrongNumbers(1000, 9999)
```
阅读全文