判断一个数是否为“水仙花数”,所谓“水仙花数”是指这样的一类数:其各位数的立方和等于这数本身。例如:371是一个“水仙花数”,371=3**3+2**3+1**3。用python
时间: 2023-11-24 17:06:33 浏览: 95
可以使用以下Python代码来判断一个数是否为水仙花数:
```python
num = int(input("请输入一个三位数:"))
# 分解出个位、十位、百位
a = num % 10
b = num // 10 % 10
c = num // 100
if num == a ** 3 + b ** 3 + c ** 3:
print(num, "是水仙花数")
else:
print(num, "不是水仙花数")
```
其中,`//`表示整除,`%`表示取余数。这段代码先接收用户输入的一个三位数,然后通过取余和整除操作,分解出它的个位、十位、百位数字。接下来,判断这个数是否等于它的各位数的立方和,如果是,则输出它是水仙花数,否则输出它不是水仙花数。
相关问题
判断一个数是否为"水仙花数",所谓"水仙花数"是指这样的一类数:其各位数字的立方和等于该数本身。例如:371是一个"水仙花数",371=33+73+13. 输入格式:
要判断一个数是否是“水仙花数”,你需要首先获取该数的每一位数字,然后计算它们各自立方并求和,如果这个和等于原数,那么原数就是“水仙花数”。以下是一个简单的 C++ 函数示例,用于检查给定的整数是否是水仙花数:
```cpp
#include <iostream>
bool is narcissistic(int num) {
int digits[10], sum = 0;
if (num == 0)
return true; // 特殊处理0的情况
while (num != 0) {
digits[sum++] = num % 10; // 获取个位数字
num /= 10; // 移除个位
}
for (int i = 0; i < sum; ++i) {
if (digits[i] != (digits[i] * digits[i] * digits[i])) { // 检查每个立方和是否相等
return false;
}
}
return true; // 如果所有检查都通过,则返回true
}
int main() {
int number;
std::cout << "请输入一个整数: ";
std::cin >> number;
if (is_narcissistic(number))
std::cout << number << " 是水仙花数.\n";
else
std::cout << number << " 不是水仙花数.\n";
return 0;
}
```
在这个程序中,`is_narcissistic`函数负责主要的逻辑,它先将数字分解成个位数组,然后逐个检查这些立方和是否匹配。在主函数中,我们从用户那里接收输入并调用此函数。
编写程序显示所有水仙花数。所谓水仙花数,是指一个3位数,其各位数字立方和等于该数字本身。例如,153是水仙花数,因为153=13+53+33
### 计算所有三位水仙花数的实现方法
要找出所有的三位水仙花数,可以通过编程来逐一验证每一个三位数是否满足条件。以下是几种常见编程语言中的具体实现方式。
#### Python 实现
Python 提供了一种简洁的方式来解决这个问题。可以使用循环遍历从 100 到 999 的所有整数,并分别提取它们的百位、十位和个位数字进行计算[^1]。
```python
for num in range(100, 1000): # 遍历所有三位数
hundreds = num // 100 # 百位
tens = (num // 10) % 10 # 十位
units = num % 10 # 个位
if hundreds ** 3 + tens ** 3 + units ** 3 == num: # 判断立方和是否等于原数
print(num)
```
#### C 语言实现
C 语言是一种高效的低级语言,在处理这类问题时也非常适用。下面是一段完整的代码示例[^2]:
```c
#include<stdio.h>
int main(){
for(int i=100;i<1000;i++){
int a=i/100; // 百位
int b=(i%100)/10; // 十位
int c=i%100%10; // 个位
if((a*a*a+b*b*b+c*c*c)==i){ // 如果立方和等于原数,则输出
printf("%d\n",i);
}
}
}
```
#### MATLAB 实现
MATLAB 是一种强大的数值计算工具,也可以用来求解此类问题。以下是一个基于 MATLAB 的解决方案[^4]:
```matlab
function [NarcissisticNumber] = find_narcissistic_numbers()
NarcissisticNumber = [];
for n = 100:999
i = floor(n / 100); % 百位
j = floor(mod(n, 100) / 10); % 十位
k = mod(n, 10); % 个位
if n == i^3 + j^3 + k^3 % 若立方和等于原数则记录下来
NarcissisticNumber = [NarcissisticNumber, n];
end
end
end
```
以上三种方法均能有效解决问题,选择哪种取决于个人偏好以及实际应用场景的需求。
阅读全文
相关推荐


















