题目1: 编写一个程序,求解 100~999 之间的所有水仙花数。
科普:如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。
代码编写的思路为,将3位数如153的个十百位数表示出来,然后只需要按照科普来就行了。
代码如下:
# a,b,c分别是百、十、个位
for i in range(100,1000):
a=i//100
c=i%10
b=(i%100)//10
if (a**3+b**3+c**3)==i:
print(i)
结果:
153
370
371
407
题目2: 编写一个程序,判断一个整数是否为回文数。
科普:回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
负数和零还有最后一位为零的数很明显不是回文数。这时就需要分情况了,是偶位数的话,如是4位数1221,对其进行判断时,可以利用对数的后两位进行翻转来判断,这时只需要判断,12和翻转过来的21是相等的就行。是奇位数3位数或5位数的时候如12321,那么反转后的数字位数会比原来的一半多一位,反转后的数字为123,所以,if x == revertedNumber or x == revertedNumber // 10 才对两种情况(左侧是当 x 的位数是偶数时;右侧是当 x 的位数是奇数时)进行判断。
下面的图片来自小甲鱼的链接: 第018讲:了不起的分支和循环(V)。
代码如下:
x = int(input("请输入一个正整数:"))
if x < 0 or (x % 10 == 0 and x != 0):
print("不是回文数。")
else:
revertedNumber = 0
while x > revertedNumber:
revertedNumber = revertedNumber * 10 + x % 10
x //= 10
if x == revertedNumber or x == revertedNumber // 10:
print("是回文数。")
else:
print("不是回文数。")
结果如下: