一个长整数除以10,结果在Python中在数值上不正确
我正在从LeetCode学习Python并练习LinkedList问题。在这个问题中,需要添加2个整数,这些整数以LinkedList格式给出,每个节点中的每个数字,结果应拆分为LinkedList,节点中的每个数字 在程序中,当我将10000000000000000000466除以10时,得到的是999999999999999999143150857216,而不是1000000000000000000046,这是不正确的。我的第一个猜测是溢出,但我了解到python会根据数字的大小自动分配长整数。不知道我错过了什么。有谁能在这方面帮助我吗? 附上我的代码、测试用例和调试打印输出一个长整数除以10,结果在Python中在数值上不正确,python,integer,Python,Integer,我正在从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