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

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

#### 在此示例中，您将学习检查用户输入的号码是否是阿姆斯特朗数。

要理解此示例，您应该了解以下 [C++ 编程](/cpp-programming "C++ tutorial")主题：

*   [C++ `if`，`if...else`和嵌套`if...else`](/cpp-programming/if-else)
*   [C++ `while`和`do...while`循环](/cpp-programming/do-while-loop)

* * *

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

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

对于 3 位的阿姆斯特朗数，每个数位的立方和等于该数字本身。 例如，153 是阿姆斯特朗数，因为

```cpp
153 = 1*1*1 + 5*5*5 + 3*3*3 
```

* * *

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

```cpp
#include <iostream>
using namespace std;

int main() {
    int num, originalNum, remainder, result = 0;
    cout << "Enter a three-digit integer: ";
    cin >> num;
    originalNum = num;

    while (originalNum != 0) {
        // remainder contains the last digit
        remainder = originalNum % 10;

        result += remainder * remainder * remainder;

        // removing last digit from the orignal number
        originalNum /= 10;
    }

    if (result == num)
        cout << num << " is an Armstrong number.";
    else
        cout << num << " is not an Armstrong number.";

    return 0;
}
```

**输出**

```cpp
Enter a positive integer: 371
371 is an Armstrong number.
```

在程序中，我们遍历`while`循环，直到`originalNum`为 0。

在循环的每次迭代中，将`orignalNum`的最后一位数字的立方添加到`result`中。

```cpp
remainder = originalNum % 10;        
result += remainder * remainder * remainder;
```

并且，最后一位从`orignalNum`中删除。

循环结束时，单个数字的立方的总和存储在`result`中。

* * *

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

```cpp
#include <cmath>
#include <iostream>

using namespace std;

int main() {
   int num, originalNum, remainder, n = 0, result = 0, power;
   printf("Enter an integer: ");
   scanf("%d", &num);

   originalNum = num;

   while (originalNum != 0) {
      originalNum /= 10;
      ++n;
   }
   originalNum = num;

   while (originalNum != 0) {
      remainder = originalNum % 10;

      // pow() returns a double value
      // round() returns the equivalent int
      power = round(pow(remainder, n));
      result += power;
      originalNum /= 10;
   }

   if (result == num)
      cout << num << " is an Armstrong number.";
   else
      cout << num << " is not an Armstrong number.";
   return 0;
}
```

**输出**

```cpp
Enter an integer: 1634
1634 is an Armstrong number.
```

在该程序中，首先计算输入数字的位数，并将其存储在`n`中。

并且，`pow()`函数计算`while`循环的每次迭代中各个数字的幂。