입력으로 양의 정수가 저장된 LinkedList
가 주어질 때 각 리스트를 reverse한 값을 더하고 다시 LinkedList
로 만드는 문제이다.
Js에서는 같은 풀이로 풀면 두 리스트의 합이 1경이 넘어간 시점부터 합을 리스트로 바꾸는 과정에서 잘못된 연산을 한다.
console.log(98765432198765245 % 10) // 8...........
-(2⁵³-1) 부터 2⁵³ -1 까지는 정확히 IEEE-754로 표현될 수 있지만, 그 초과와 이하 는 IEEE-754로 직접 표현될 수 없으며 가까운 수나 0으로 반올림 한다. 라고 구글에 나와있는데 그럼 0이 나와야하는거 아닌가,, 나중에 스터디 있을 때 리터분들한테 물어봐야겠다.
https://www.exploringbinary.com/floating-point-converter/ 에 따르면 98765432198765245에 가장 가까운 숫자는 98765432198765248이다. 따라서 8이 나온다
그래서 일단은 파이썬으로 풀었다.
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def getSum(node: ListNode):
i = 0
result = 0
while node:
result += node.val * pow(10, i)
node = node.next
i += 1
return result
def converNumToListNode(num):
result = ListNode()
cur = result
while num > 0:
cur.val = num % 10
num //= 10
if (num > 0):
cur.next = ListNode()
cur = cur.next
return result
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
total = getSum(l1) + getSum(l2)
return converNumToListNode(total)