冰红茶TD 发表于 2024-9-22 15:39:24

回文数判定问题

python-018讲课后作业,判断一个整数是否为回文数,我编写代码如下:

i = int(input("请输入一个正整数:"))
temp = i
sum = 0
num_x = len(str(i))
print(num_x)   #我添加了输出i的位数做参考
while num_x >= 0:
    sum = sum + (temp % 10) * (10 ** (num_x - 1))
    num_x = num_x - 1
    temp = temp // 10
if sum == i:
    print(i,"是一个回文数",sep="")
else:
    print(i,"不是一个回文数",sep="")

问题:
测试发现,输入数字长度15位以内可以正常判定是否回文数,数字长度达到17位,输入回文数也会判定非回文数,大佬们这个是啥问题啊?

FishC 发表于 2024-9-22 15:43:46

你好!这个问题的主要原因是浮点数精度的限制。在 Python 中,当整数位数达到一定长度时,进行浮点数运算可能会导致精度损失,从而影响结果准确性。这在使用大数时尤为显著。

为了避免精度问题,可以采用字符串处理方式判断回文数。以下是改进版代码:

# 获取输入的正整数
i = input("请输入一个正整数:")

# 直接比较字符串与其反转后的字符串
if i == i[::-1]:
    print(i, "是一个回文数", sep="")
else:
    print(i, "不是一个回文数", sep="")

这段代码通过直接比较字符串与其反转后的字符串,实现了无论输入长度多大,都能准确判断是否为回文数的功能。希望这个答案对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

简柠啦 发表于 2024-9-24 13:55:28

{:10_256:}{:10_256:}

trinityee 发表于 2024-9-24 14:50:58

{:10_254:}{:10_254:}

很cool的阳 发表于 2024-9-26 14:06:34

{:7_113:}

裤子不翼而飞 发表于 2024-9-28 17:12:14

FishC 发表于 2024-9-22 15:43
你好!这个问题的主要原因是浮点数精度的限制。在 Python 中,当整数位数达到一定长度时,进行浮点数运算可 ...

1

FishC 发表于 2024-9-28 17:17:25

裤子不翼而飞 发表于 2024-09-28 17:12
1

你好!要判断一个整数是否为回文数,可以采用字符串反转的方法,确保不会因为整数长度问题而出现判断错误。以下是简洁的代码示例:

# 获取输入的正整数
num = int(input("请输入一个正整数:"))

# 将整数转换为字符串
num_str = str(num)

# 直接比较字符串与其反转后的字符串
if num_str == num_str[::-1]:
    print(num, "是一个回文数")
else:
    print(num, "不是一个回文数")

解释:
1. `num_str = str(num)`:将输入的整数转换为字符串。
2. `num_str[::-1]`:利用字符串切片的特性,得到反转后的字符串。
3. 比较原字符串与反转后的字符串是否相等即可判断是否为回文数。

这种方法避免了浮点数精度问题,所以即使输入非常大的数字也能准确判断。希望这个回答对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

OKMY 发表于 2024-10-4 16:26:18

6

harryhan123 发表于 2024-10-5 18:14:13

啊?
页: [1]
查看完整版本: 回文数判定问题