一个长整数除以10,结果在Python中在数值上不正确

一个长整数除以10,结果在Python中在数值上不正确,python,integer,Python,Integer,我正在从LeetCode学习Python并练习LinkedList问题。在这个问题中,需要添加2个整数,这些整数以LinkedList格式给出,每个节点中的每个数字,结果应拆分为LinkedList,节点中的每个数字 在程序中,当我将10000000000000000000466除以10时,得到的是999999999999999999143150857216,而不是1000000000000000000046,这是不正确的。我的第一个猜测是溢出,但我了解到python会根据数字的大小自动分配长整

我正在从LeetCode学习Python并练习LinkedList问题。在这个问题中,需要添加2个整数,这些整数以LinkedList格式给出,每个节点中的每个数字,结果应拆分为LinkedList,节点中的每个数字

在程序中,当我将10000000000000000000466除以10时,得到的是999999999999999999143150857216,而不是1000000000000000000046,这是不正确的。我的第一个猜测是溢出,但我了解到python会根据数字的大小自动分配长整数。不知道我错过了什么。有谁能在这方面帮助我吗? 附上我的代码、测试用例和调试打印输出

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        def getNumber(p1: ListNode) -> int:
            number=0
            power=0
            while p1:
                number = number + (10**power * p1.val)
                p1 = p1.next
                power += 1
            return number
        num = getNumber(l1)+getNumber(l2)
        print(num)
        node = ListNode()
        head = node
        while True:
            newNode = ListNode()
            newNode.val = num%10
            node.next = newNode
            node = newNode
            num = int(num/10)
            print(num) #This output is given below
            if num ==0: break
        return head.next
测试输入: [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[5,6,4]

打印:

10000000000000000000466 99999999999999991433150857216 9999999999999999583119736832 1000000000000000013287555072 100000000000000004764729344 10000000000000000905969664 1000000000000000117440512 100000000000000008388608 10000000000000000000000 1000000000000000000000 100000000000000000000 10000000000000000000 1000000000000000000 100000000000000000 10000000000000000 1000000000000000 100000000000000 10000000000000 1000000000000 100000000000 10000000000 1000000000 100000000 10000000 1000000 100000 10000 1000 100 10 1. 0

罪魁祸首如下:

num = int(num/10)
因为num/10是一个IEE 754浮点值,只有48位尾数,所以精度有限。您应该改为使用整数除法num=num//10

演示:


Python3只有1个整数类型,相当于Python2任意大小的长类型。但是当你除以10,即x/10,你就创建了一个浮动,它不是任意大小的。也许您可以使用整数除法,例如x//10非常感谢您的解释!
num = 1000000000000000000000000000466
print(num, num //10, int(num/10))
1000000000000000000000000000466 100000000000000000000000000046 99999999999999991433150857216