Là bài tập tùy chọn, tôi đang nghĩ đến việc viết bài thực hành của riêng mình cho lớp BigInteger, nơi tôi sẽ cung cấp các phương pháp riêng để cộng, trừ, nhân, v.v.Tôi nên sử dụng cấu trúc dữ liệu nào để tạo lớp "BigInteger" của riêng mình?
Điều này sẽ dành cho số nguyên dài tùy ý, thậm chí hàng trăm chữ số.
Trong khi thực hiện toán học về các con số này, chữ số theo chữ số không khó, bạn nghĩ cơ sở hạ tầng nào tốt nhất sẽ đại diện cho "BigInteger" của tôi?
Lúc đầu, tôi đã xem xét sử dụng một mảng nhưng sau đó tôi đã nghĩ rằng tôi vẫn có khả năng tràn (hết các vùng mảng) sau khi thêm hoặc nhân lớn. Đây có phải là một trường hợp tốt để sử dụng một danh sách liên kết, kể từ khi tôi có thể tack trên chữ số với O (1) thời gian phức tạp?
Có cấu trúc dữ liệu nào khác phù hợp hơn một danh sách được liên kết không? Loại dữ liệu mà cấu trúc dữ liệu của tôi có phải là loại số nguyên nhỏ nhất có thể mà tôi có sẵn cho tôi không?
Ngoài ra, tôi có nên cẩn thận về cách lưu trữ biến "carry" của mình không? Nên nó, chính nó, là loại "BigInteger" của tôi?
(a) Tôi không nghĩ bạn nên sử dụng danh sách được liên kết, tôi chắc chắn một số thao tác sẽ yêu cầu (hoặc hưởng lợi từ) quyền truy cập ngẫu nhiên.Ngoài ra, danh sách liên kết chậm với tất cả các cấp phát bộ nhớ. (b) Nếu bạn sử dụng số nguyên nhỏ nhất thì bạn sẽ sử dụng bộ nhớ thấp nhất, nhưng nếu bạn sử dụng bất kỳ thứ gì khớp với kích thước của một từ (nghĩa là 'int') thì bạn sẽ nhanh. Vì vậy, nó phụ thuộc vào những gì mối quan tâm chính của bạn là. Một khả năng hiển nhiên là làm cho kiểu số nguyên là một tham số mẫu của lớp của bạn. (c) Kiểm tra thư viện GNU MP, bạn sẽ không sai nếu bạn sao chép một số quyết định thiết kế của họ. – Manuel
Đây là mã nguồn của lớp BigInteger của Java: http://kickjava.com/src/java/math/BigInteger.java.htm – Manuel