[ai] Architecture CPU List Node to Array Reverse Sum

October 22, 2025 (3w ago)

Secara teori bisa, tapi secara praktik TIDAK disarankan dan akan gagal untuk kasus angka besar. Mari kita bahas kenapa:


[ typescript ]

Kenapa tidak bisa menggunakan cara:

ListNode → Array → reverse → join("") → Number → tambah

Karena:

  1. Limit Number di JavaScript

    • JavaScript menggunakan tipe Number berbasis IEEE 754 double precision
    • Maksimal angka akurat hanya sampai 15–16 digit
    • Angka lebih dari itu akan jadi notasi ilmiah (1e+30) dan kehilangan presisi

Contoh kasus:

x = 1000000000000000000000000000001 (31 digit)
y = 465
Number(x) = 1e+30  ❌ Tidak akurat

Output jadi NaN saat dikonversi balik ke array digit.


Kenapa Harus pakai logika digit per digit (tanpa Number)

Karena ListNode itu dirancang untuk merepresentasikan bilangan sangat besar, bahkan tak terbatas, dengan bentuk digit linked list reverse.

Prinsip algoritma:

  • Ambil masing-masing digit dari l1 dan l2
  • Tambahkan dengan carry
  • Masukkan digit satu per satu ke ListNode baru
  • Tidak pernah mengubah ke tipe Number

🔍 Ilustrasi Debug Per Iterasi

Misal:

l1 = 2 -> 4 -> 3  (342)
l2 = 5 -> 6 -> 4  (465)
Iterasi x y carry sum = x+y+carry digit (sum%10) carry (Math.floor(sum/10))
1 2 5 0 7 7 0
2 4 6 0 10 0 1
3 3 4 1 8 8 0
Hasil ListNode 7 -> 0 -> 8 (807) ✅

🎯 Kesimpulan:

Metode Bisa untuk angka kecil Bisa untuk angka besar Aman presisi Disarankan
Convert ke Number lalu tambah
Tambah digit per digit (asli)

Jadi :

❌ Tidak boleh pakai cara convert ke array lalu ke string lalu Number, karena JavaScript Number tidak mampu menangani angka besar dengan akurat.