寻找神奇数字:Python实现及优化
寻找神奇数字:Python实现及优化
问题描述: 如果一个正整数恰好是其倒序数字的倍数,我们称这个数为'神奇数字'。例如,121是神奇数字,因为121是121的1倍;1458是神奇数字,因为1458是8541的2倍。
目标: 给定一个正整数n,编写一个函数,计算并返回小于等于n的神奇数字的个数。
思路:
- 遍历: 遍历从1到n的所有正整数。
- 反转与判断: 对于每个正整数,将其转换为字符串,反转字符串,再将反转后的字符串转换回整数。判断反转后的整数是否为0,如果为0则该数不是神奇数字。判断原整数是否可以被反转后的整数整除,如果是,则该数是神奇数字。
- 计数: 使用一个计数器,每找到一个神奇数字就将计数器加1。
Python代码实现:
def is_magic(num):
# 判断一个数是否是神奇数
reverse_num = int(str(num)[::-1])
if reverse_num == 0:
return False
return num % reverse_num == 0
def count_magic_numbers(n):
# 计算小于等于n的神奇数的个数
count = 0
for i in range(1, n+1):
if is_magic(i):
count += 1
return count
n = 100
print(f'小于等于 {n} 的神奇数字有 {count_magic_numbers(n)} 个')
优化:
- 减少字符串操作: 可以使用数学方法来反转数字,避免频繁的字符串转换操作,从而提高效率。
- 提前判断: 可以预先排除一些不可能是神奇数字的情况,例如个位为0的数字。
测试结果:
当 n = 100 时,小于等于 n 的神奇数字有 19 个。
原文地址: https://www.cveoy.top/t/topic/jx8j 著作权归作者所有。请勿转载和采集!