原文: https://www.programiz.com/cpp-programming/examples/check-armstrong-number
在此示例中,您将学习检查用户输入的号码是否是阿姆斯特朗数。
要理解此示例,您应该了解以下 C++ 编程主题:
一个正整数称为阿姆斯特朗数(n 阶),如果
abcd... = an + bn + cn + dn +
对于 3 位的阿姆斯特朗数,每个数位的立方和等于该数字本身。 例如,153 是阿姆斯特朗数,因为
153 = 1*1*1 + 5*5*5 + 3*3*3
示例:检查 3 位阿姆斯特朗数
#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 digitremainder = originalNum % 10;result += remainder * remainder * remainder;// removing last digit from the orignal numberoriginalNum /= 10;}if (result == num)cout << num << " is an Armstrong number.";elsecout << num << " is not an Armstrong number.";return 0;}
输出
Enter a positive integer: 371371 is an Armstrong number.
在程序中,我们遍历while循环,直到originalNum为 0。
在循环的每次迭代中,将orignalNum的最后一位数字的立方添加到result中。
remainder = originalNum % 10;result += remainder * remainder * remainder;
并且,最后一位从orignalNum中删除。
循环结束时,单个数字的立方的总和存储在result中。
示例:检查 n 位阿姆斯特朗数
#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 intpower = round(pow(remainder, n));result += power;originalNum /= 10;}if (result == num)cout << num << " is an Armstrong number.";elsecout << num << " is not an Armstrong number.";return 0;}
输出
Enter an integer: 16341634 is an Armstrong number.
在该程序中,首先计算输入数字的位数,并将其存储在n中。
并且,pow()函数计算while循环的每次迭代中各个数字的幂。
