C++水仙花数-深入浅出.学习与讲解
水仙花数,又称阿姆斯特朗数,是指一个n位数 (n≥3),它的每个位上的数字的n次幂之和等于它本身。例如:153是一个水仙花数,因为153=1³+5³+3³。
在C++中,我们可以使用循环和条件判断来找出所有的水仙花数。下面是一个简单的代码示例,该代码会找出所有三位的水仙花数:
cpp
#include <iostream>
#include <cmath>
int main() {
int num;
std::cout << "请输入一个三位数: ";
std::cin >> num;
if (num < 100 || num > 999) {
std::cout << "输入错误,请输入一个三位数!" << std::endl;
return -1;
}
std::cout << "水仙花数有: ";
for (int i = 100; i <= 999; i++) {
int a = i / 100; // 百位数字
int b = (i % 100) / 10; // 十位数字
int c = i % 10; // 个位数字
if (i == a * a * a + b * b * b + c * c * c) {
std::cout << i << " ";
}
}
return 0;
}
代码注释:
- 首先,我们包含了两个头文件:
iostream
用于输入输出,cmath
用于数学运算。 - 在
main()
函数中,我们首先从用户那里获取一个三位数。如果输入的不是三位数,程序会输出错误信息并退出。 - 然后,我们使用一个for循环遍历所有的三位数。对于每个数字,我们提取出它的百位、十位和个位数字。
- 使用条件判断,我们检查这个数字是否是水仙花数。如果是,我们就输出这个数字。
- 最后,程序结束并返回0。
下面是一个while循环版本的代码:
c
#include <iostream>
#include <cmath>
int main() {
int num, hundreds, tens, ones;
std::cout << "请输入一个三位数: ";
std::cin >> num;
if (num < 100 || num > 999) {
std::cout << "输入错误,请输入一个三位数!" << std::endl;
return -1;
}
while (num > 0) {
hundreds = num / 100; // 百位数字
tens = (num % 100) / 10; // 十位数字
ones = num % 10; // 个位数字
num = hundreds + tens + ones; // 重置num为各位数字之和
}
if (num == hundreds * hundreds * hundreds + tens * tens * tens + ones * ones * ones) {
std::cout << num << " 是水仙花数" << std::endl;
} else {
std::cout << num << " 不是水仙花数" << std::endl;
}
return 0;
}
代码与之前的版本略有不同,但核心逻辑是一样的。以下是代码的详细讲解:
- 输入获取:首先,我们从用户那里获取一个三位数。如果输入的不是三位数,程序会输出错误信息并退出。
- while循环:为了使用while循环,我们首先需要将数字分解为其各个位上的数字。然后,我们不断地将数字分解为其各个位上的数字,直到这个数字变为个位数。在每次迭代中,我们都更新num变量为当前数字的各个位上的数字之和。这样,当循环结束时,num将只包含个位数。
3. 判断是否为水仙花数:最后,我们检查num是否是水仙花数。如果是,我们输出相应的信息;否则,我们输出该数字不是水仙花数的信息。
4. 返回值:程序结束并返回0。