Python判断Automorphic number(自守数)方法,求更简单的实现逻辑
自守数判断的简化实现方案
自守数的核心判定规则非常简单:数字n的平方的末尾k位与n本身完全相等,k为n的总位数。
你之前的实现应该是先计算n的位数,再求平方对10^k取模后比对,还有两种更简洁的实现逻辑:
方案1:逐位比对法(无溢出风险,逻辑最直观)
不需要提前计算位数,也不用求10的幂次,逐位比对末尾数字即可,所有语言通用:
def is_automorphic(n): square = n * n tmp = n while tmp > 0: # 每次比对当前的最后一位 if tmp % 10 != square % 10: return False tmp = tmp // 10 square = square // 10 return True
优势:
- 代码量少,逻辑清晰,新手也能一眼看懂
- 无需额外计算输入数字的位数,减少多余步骤
- 支持任意长度的整数,Python等支持大整数的语言无需担心溢出
方案2:字符串截取比对法(写法最简洁)
把数字转成字符串后直接截取平方结果的末尾子串比对,静态语言也可以用:
#include <string> bool is_automorphic(int n) { std::string num_str = std::to_string(n); std::string square_str = std::to_string(n * n); return square_str.substr(square_str.length() - num_str.length()) == num_str; }
优势:
- 代码最短,几乎不需要写逻辑判断,完全基于字符串操作实现
- 不用处理任何数值计算相关的边界问题
两种方案对0、1这类特殊的边界自守数都能正确判定,面试写这两种实现都比传统写法更有亮点。
内容的提问来源于stack exchange,提问作者Humble_PrOgRaMeR
相关产品推荐
相关产品推荐

