求得100-999内的水仙花数和。水仙花数定义:一个三位数的各个位数的三次方和等于这个数本身,列如153,111+555+333=153.
要求如下:
(1)函数isPpdi(n):判断一个数是否是水仙花数,入参为一个三位数,返回值为True/False,True代表的是水仙花数,False代表的不是水仙花数。
(2)函数getSum(a,b):用于求区间[a,b]内所有的水仙花数,并求取/
(3)main函数:,用input输入100和999,调用getSum函数求取100-999之间所有水仙花数之和,并输出。
稍等
def isPpdi(n):
if n == sum([int(i)**3 for i in str(n)]):
return True
else:
return False
def getSum(a, b):
res = []
for i in range(a, b+1):
if isPpdi(i):
res.append(i)
return sum(res)
if __name__ == '__main__':
a = int(input("输入数字a:"))
b = int(input("输入数字b:"))
print("{}到{}之间的水仙花数之和为{}".format(a, b, getSum(a, b)))
该回答引用chatgpt:这样更好一点,不符合给出提示
def isPpdi(n):
# 判断一个数是否是水仙花数
# 入参为一个三位数,返回值为True/False
if n < 100 or n > 999:
return False
digits = [int(d) for d in str(n)]
sum_of_cubes = sum([d**3 for d in digits])
return sum_of_cubes == n
def getSum(a, b):
# 求区间[a, b]内所有的水仙花数,并求和
narcissistic_nums = []
for num in range(a, b + 1):
if isPpdi(num):
narcissistic_nums.append(num)
return sum(narcissistic_nums)
if __name__ == '__main__':
start = int(input("请输入区间起始值:"))
end = int(input("请输入区间结束值:"))
if start < 100 or start > 999 or end < 100 or end > 999 or start > end:
print("输入的起始值和结束值不符合要求,请重新输入。")
else:
sum_of_narcissistic_nums = getSum(start, end)
print(f"区间[{start}, {end}]内的水仙花数之和为:{sum_of_narcissistic_nums}")
以下是Python的实现代码:
def isPpdi(n):
s = str(n)
sum = 0
for i in range(len(s)):
sum += int(s[i]) ** 3
return sum == n
def getSum(a,b):
sum = 0
for i in range(a, b+1):
if isPpdi(i):
sum += i
return sum
if __name__ == '__main__':
a,b = map(int, input().split())
print(getSum(a,b))
函数 isPpdi
用于判断一个三位数是否是水仙花数,实现方式为将其每一位上的数字的三次方进行求和,并判断是否等于该数本身。
函数 getSum
用于求区间 $[a, b]$ 内所有的水仙花数,采用循环遍历法,遍历范围为 $[a, b]$,对于每个数,调用 isPpdi
进行判断,如果为 True,则将其加入求和结果中,最后返回求和结果。
在 main
函数中,通过输入获取区间的上下限,并调用 getSum
函数计算 $100-999$ 内所有水仙花数的和,并输出结果。