A   Narcissistic decimal number   is a non-negative integer,   



n


{\displaystyle n}

,   that is equal to the sum of the   



m


{\displaystyle m}

-th   powers of each of the digits in the decimal representation of   



n


{\displaystyle n}

,   where   



m


{\displaystyle m}

   is the number of digits in the decimal representation of   



n


{\displaystyle n}

.



Narcissistic (decimal) numbers are sometimes called   Armstrong   numbers, named after Michael F. Armstrong.

They are also known as   Plus Perfect   numbers.



An example

   if   



n


{\displaystyle n}

   is   153 
   then   



m


{\displaystyle m}

,   (the number of decimal digits)   is   3 
   we have    13 + 53 + 33   =   1 + 125 + 27   =   153  
   and so   153   is a narcissistic decimal number


Task

Generate and show here the first   25   narcissistic decimal numbers.



Note:   




0

1


=
0


{\displaystyle 0^{1}=0}

,   the first in the series.



See also

   the  OEIS entry:     Armstrong (or Plus Perfect, or narcissistic) numbers.
   MathWorld entry:   Narcissistic Number.
   Wikipedia entry:     Narcissistic number.


// version 1.1.0
 
fun isNarcissistic(n: Int): Boolean {
    if (n < 0) throw IllegalArgumentException("Argument must be non-negative")
    var nn = n
    val digits = mutableListOf<Int>()
    val powers = IntArray(10) { 1 } 
    while (nn > 0) {
       digits.add(nn % 10)
       for (i in 1..9) powers[i] *= i // no need to calculate powers[0]
       nn /= 10
    }
    val sum = digits.filter { it > 0 }.map { powers[it] }.sum()
    return n == sum
}
 
fun main(args: Array<String>) {
    println("The first 25 narcissistic (or Armstrong) numbers are:")
    var i = 0
    var count = 0
    do {
        if (isNarcissistic(i)) {
            print("$i ")
            count++
        }
        i++
    }
    while (count < 25)    
}