C++程序 检查阿姆斯特朗数
什么是阿姆斯特朗数?
阿姆斯特朗数,又被称为自恋数,是指一个n位数(n>1),它的每个数字的n次方之和等于它本身。例如:153是一个阿姆斯特朗数,因为1^3+5^3+3^3=153。
检查阿姆斯特朗数的方法
检查一个数字是否是阿姆斯特朗数的方法很简单,只需要按照下面的步骤进行:
- 将数字转换为字符串;
- 将字符串每个字符转换为数字,并计算该数字的n次方;
- 将n次方的结果相加,若结果等于原数,则该数是阿姆斯特朗数;反之,不是阿姆斯特朗数。
例如,以下是一个简单的检查阿姆斯特朗数的函数:
#include <iostream>
#include <string>
bool isArmstrong(int num, int n) {
std::string strNum = std::to_string(num);
int sum = 0;
for (char c : strNum) {
int digit = c - '0';
sum += pow(digit, n);
}
return sum == num;
}
int main() {
int num = 153;
if (isArmstrong(num, 3)) {
std::cout << num << " is an Armstrong number!" << std::endl;
} else {
std::cout << num << " is not an Armstrong number." << std::endl;
}
return 0;
}
在上面的代码中,num
表示待检查的数字,n
表示该数字的次方数。函数isArmstrong
会将数字转换为字符串,然后依次计算每个数字的n次方,并将结果相加。最后,比较相加后的结果与原数是否相等即可判断该数是否是阿姆斯特朗数。运行结果如下:
153 is an Armstrong number!
支持任意次方数的阿姆斯特朗数检查
上面的代码只支持3次方数的检查,如果我们需要检查其他次方数的阿姆斯特朗数,就需要修改代码。为了支持任意次方数的检查,我们可以先计算n次方的结果,并记录在一个数组中。然后,我们就可以直接使用数组中的值,不需要每次重新计算。
以下是支持任意次方数的阿姆斯特朗数检查函数:
#include <iostream>
#include <string>
#include <vector>
bool isArmstrong(int num, int n) {
std::string strNum = std::to_string(num);
std::vector<int> powOfDigits;
int sum = 0;
for (char c : strNum) {
int digit = c - '0';
int powOfDigit = 1;
for (int i = 0; i < n; i++) {
powOfDigit *= digit;
}
sum += powOfDigit;
powOfDigits.push_back(powOfDigit);
}
return sum == num;
}
int main() {
int num = 9474;
if (isArmstrong(num, 4)) {
std::cout << num << " is an Armstrong number!" << std::endl;
} else {
std::cout << num << " is not an Armstrong number." << std::endl;
}
return 0;
}
在代码中,我们用一个std::vector<int>
来存储每个数字的n次方的结果。最后,比较相加后的结果与原数是否相等即可判断该数是否是阿姆斯特朗数。运行结果如下:
9474 is an Armstrong number!
结论
阿姆斯特朗数是一个非常有趣的数学问题,使用C++编程对其进行检查并不困难。我们可以使用字符串来将数字转化为字符形式,然后依次取出每个数字,并计算其n次方的结果。最后将n次方的结果累加,如果结果等于原数,则该数是阿姆斯特朗数。如果我们需要检查其他次方数的阿姆斯特朗数,只需要稍作修改即可。在实际应用中,该算法可以被广泛应用于数字验证、密码学等领域。