定义函数isNarcissus(n:int):bool,判断一个数是否是水仙花数,是水仙花数则返回True,否则返回False。在测试函数main()中用循环将三位数的水仙花数筛选出来
时间: 2024-05-12 18:20:08 浏览: 60
水仙花数指的是一个n位数,其各个位上数字的n次方之和等于这个数本身。例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。
以下是代码实现:
```python
def isNarcissus(n: int) -> bool:
"""
判断一个数是否是水仙花数
"""
num_str = str(n)
n_len = len(num_str)
total = 0
for i in range(n_len):
total += int(num_str[i]) ** n_len
return total == n
def main():
"""
筛选三位数的水仙花数
"""
for i in range(100, 1000):
if isNarcissus(i):
print(i)
if __name__ == '__main__':
main()
```
输出结果为:
```
153
370
371
407
```
相关问题
C++编写一个函数,判断某一个数是否为水仙花数。(水仙花数:一个三位数的各位数字的立方和等于该数本身)
以下是C++代码实现:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
bool isNarcissisticNumber(int num) {
int sum = 0;
int temp = num;
while (temp != 0) {
int digit = temp % 10;
sum += pow(digit, 3);
temp /= 10;
}
return sum == num;
}
int main() {
int num;
cout << "请输入一个三位数: ";
cin >> num;
if (isNarcissisticNumber(num)) {
cout << num << "是水仙花数" << endl;
} else {
cout << num << "不是水仙花数" << endl;
}
return 0;
}
```
首先定义一个 `isNarcissisticNumber` 函数,接收一个整数参数 `num`,用于判断该数是否为水仙花数。在函数中,我们使用循环依次取出该数的每一位数字,计算各位数字的立方和,最后将计算结果与原数比较,如果相等则返回 `true`,否则返回 `false`。
在 `main` 函数中,我们首先从用户输入中获取一个三位数,然后调用 `isNarcissisticNumber` 函数进行判断,最后输出判断结果。
水仙花数是指一个n位正整数(n≥3),它的每个位上的数字的n次幂之和等于它本身。例如:153=1 3 +5 3 +3 3 。 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。 函数接口定义:
### 回答1:
判断是否水仙花数:
def isNarcissisticNumber(num: int) -> bool:
"""
判断一个数是否为水仙花数
:param num: 待判断的数
:return: True表示是水仙花数,False表示不是水仙花数
"""
n = len(str(num))
sum =
for i in str(num):
sum += int(i) ** n
return sum == num
打印水仙花数:
def printNarcissisticNumber(m: int, n: int):
"""
打印区间[m,n]内的所有水仙花数
:param m: 区间左端点
:param n: 区间右端点
"""
for i in range(m, n+1):
if isNarcissisticNumber(i):
print(i, end=' ')
print()
### 回答2:
水仙花数是指一个n位正整数,其各位数字的n次幂之和等于该数本身。例如,153是一个水仙花数,因为1³ + 5³ + 3³ = 153。
要判断给定整数是否为水仙花数,可以通过如下步骤实现:
1. 将给定整数转换成字符串,获取该字符串的长度作为幂次n。
2. 遍历数字字符串并计算每个数字的n次幂之和。
3. 比较计算结果与原整数是否相等,如果相等则为水仙花数,否则不是。
代码如下:
def isNarcissisticNumber(num):
n = len(str(num))
total = sum([int(i) ** n for i in str(num)])
return total == num
要按从小到大的顺序打印出给定区间内的所有水仙花数,可以通过在该区间内遍历每个数并判断是否为水仙花数来实现。代码如下:
def printAllNarcissisticNumbers(m, n):
for num in range(m, n+1):
if isNarcissisticNumber(num):
print(num)
调用方式为printAllNarcissisticNumbers(m, n),其中m和n是区间的起始和结束整数。需要注意的是,如果该区间内没有水仙花数,则不会输出任何结果。
### 回答3:
水仙花数是指一个n位正整数(n≥3),它的每个位上的数字的n次幂之和等于它本身。例如:153=1^3+5^3+3^3。
本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。
判断函数:
首先,需要将输入的整数转换为字符串,然后通过遍历字符串中的每一位数字,计算其n次幂之和,与原数比较判断即可。具体的代码如下:
bool isNarcissistic(int num, int n){
string str_num = to_string(num);
int sum = 0;
for(char ch : str_num){
sum += pow((ch - '0'), n);
}
return sum == num;
}
打印函数:
对于给定的区间m和n,可以使用循环从m到n遍历每个数字,判断是否是水仙花数,如果是,则将其输出即可。具体的代码如下:
void printNarcissistic(int m, int n, int k){
for(int i=m; i<=n; i++){
if(isNarcissistic(i, k)){
cout << i << " ";
}
}
}
其中k表示幂次。以上函数均为完整的代码,可以直接调用使用。
阅读全文