在 Python 中检查一个数字是否是同构数(Automorphic Numbers)

所谓同构数,是指该数出现在它的平方数的右侧。

例如:N = 25,N**2 = 25*25 = 625

给定的数字 25 出现在结果的右侧。

因此,25 是一个同构数。

方法1

算法:

  • 将待检测数字存储在变量 num。

  • 使用 str() 函数将给定数字转换为字符串,并使用 len() 函数找到给定数字的长度,存储在变量 lenth。

  • 计算给定数字的平方并将其存储在变量 sqr_num。

  • 使用模运算和 pow() 函数获取 sqr_num 的最后 n 位数字,并将其存储在变量 n。

  • 使用 if 条件语句检查 n 是否等于给定的输入数字 num。

  • 如果语句为 True,则输出给定的数字是一个同构数。

  • 如果为 False,则输出给定的数字不是一个同构数。

num = 25
lenth = len(str(num))
sqr_num = num**2
n = sqr_num % pow(10, lenth)
if n == num:
    print(num, "是一个同构数。")
else:
    print(num, "不是一个同构数。")

方法

算法:

  • 自定义函数 is_automorphic(n),参数 n 是待检测数字。

  • 计算 n 的平方,存储在变量 sqr_num。

  • 使用 while 循环,条件是待检测数字 n > 0。

  • 分别对 n 、sqr_num 取余 10,判断取余结果是否相等。

  • 如果不相等,函数返回 False。

  • 分别对 n 、sqr_num 整除 10,去掉最后一位数字。

  • 继续 while 循环。

  • 经过多次整除,待检测数字 n 为 0,while 循环结束。

  • 函数返回 True。

  • 使用 if 语句判断函数返回结果。

  • 如果语句为 True,则输出给定的数字是一个同构数。

  • 如果为 False,则输出给定的数字不是一个同构数。

def is_automorphic(n):
    sqr_num = n * n
    while n:
        square_remainder = sqr_num%10
        number_remainder = n%10

        if square_remainder != number_remainder:
            return False

        n //= 10
        sqr_num //= 10
    return True
n = 25
if is_automorphic(n):
    print(n, "是一个同构数。")
else:
    print(n, "不是一个同构数。")

方法3

算法:

使用字符串切片,结合三元运算,使用单行代码检测同构数。

n = 25
# n^2 = 625 	'625'[-2::] = 25
print("YES" if int(str(n**2)[-len(str(n))::]) == n else "No")

方法4

算法:

使用Endswith() 方法,检测字符串是否以指定值结尾。

num = 25
a = str(num)
num1 = num ** 2
b = str(num1)
if b.endswith(a):
    print(num, "是一个同构数。")
else:
    print(num, "不是一个同构数。")

文章创作不易,如果您喜欢这篇文章,请关注、点赞并分享给朋友。如有意见和建议,请在评论中反馈。