# Kotlin 程序：检查阿姆斯特朗数

> 原文： [https://www.programiz.com/kotlin-programming/examples/armstrong-number](https://www.programiz.com/kotlin-programming/examples/armstrong-number)

#### 在此程序中，您将学习检查给定的数字是否为阿姆斯特朗数字。 您将通过在 Kotlin 中使用`while`循环学习如何做到这一点。

一个正整数称为阿姆斯特朗数`n`，如果

```kt
abcd... = an + bn + cn + dn + ...
```

对于 3 位的阿姆斯特朗数，每个数字的立方数之和等于数字本身。 例如：

```kt
153 = 1*1*1 + 5*5*5 + 3*3*3  // 153 is an Armstrong number.

```

## 示例 1：检查 3 位数字的阿姆斯特朗数 

```kt
fun main(args: Array<String>) {
    val number = 371
    var originalNumber: Int
    var remainder: Int
    var result = 0

    originalNumber = number

    while (originalNumber != 0) {
        remainder = originalNumber % 10
        result += Math.pow(remainder.toDouble(), 3.0).toInt()
        originalNumber /= 10
    }

    if (result == number)
        println("$number is an Armstrong number.")
    else
        println("$number is not an Armstrong number.")
} 
```

运行该程序时，输出为：

```kt
371 is an Armstrong number.
```

*   首先，给定数字（`num`）的值存储在另一个整数变量`originalNumber`中。 这是因为，我们需要在最后比较最终编号和原始编号的值。
*   然后，使用`while`循环循环遍历`originalNumber`，直到等于 0。
    *   在每次迭代中，`num`的最后一位存储在`remainder`中。
    *   然后，使用`Math.pow()`函数将`remainder`乘以 3（数字位数），并将其添加到`result`中。
        此处，`remainder`被转换为`Double`，因为`pow`仅接受`Double`参数，并且其值再次转换回`Int`
    *   然后，除以 10 后，从`originalNumber`中删除最后一位数字。
*   最后，比较`result`和`num`。 如果相等，则为阿姆斯特朗数。 如果不是，则不是。

以下是等效的 Java 代码：[用于检查阿姆斯特朗数的 Java 程序](/java-programming/examples/armstrong-number "Java Program to Check Armstrong Number")

* * *

## 示例 2：检查 n 位数字的阿姆斯特朗数

```kt
fun main(args: Array<string>) {
    val number = 1634
    var originalNumber: Int
    var remainder: Int
    var result = 0
    var n = 0

    originalNumber = number

    while (originalNumber != 0) {
        originalNumber /= 10
        ++n
    }

    originalNumber = number

    while (originalNumber != 0) {
        remainder = originalNumber % 10
        result += Math.pow(remainder.toDouble(), n.toDouble()).toInt()
        originalNumber /= 10
    }

    if (result == number)
        println("$number is an Armstrong number.")
    else
        println("$number is not an Armstrong number.")
}</string>
```

在此程序中，我们使用了两个`while`循环。 第一个`while`循环用于计算`num`中的位数。

然后，将`originalNumber`恢复为给定的`num`。

然后，第二个`while`循环检查数字是否为阿姆斯特朗数。

访问此页面了解如何[显示两个间隔之间的所有阿姆斯特朗数](/kotlin-programming/examples/armstrong-number-interval "Display all armstrong numbers between two intervals")。