| Đăng nhập qua LiketLy 

trả lời
  • ban co the hoi nhung ban hoc cua minh ma tai sao lai phai kho vay nhi

    Trả lời bởi bix_vix
    ăm trước
    0 0
  • Bạn dùng ngôn ngữ lập trình gì? Không rõ cấu trúc dữ liệu mà bạn nói biểu diễn số như thế nào?

    Số nguyên lớn được chia thành từng đoạn 9 số liên tiếp 1 rồi lưu vào mảng à?

    Bạn lấy ví dụ cụ thể hay là paste đoạn code khai báo vào đây đi!

    Trả lời bởi bix_vix
    ăm trước
    0 0
  • Câu trả lời được chấp nhận

    Hay quá nhỉ? Bạn dùng cách nào để chia với cấu trúc dữ liệu như thế? Mình chưa bao giờ nghĩ đến cách chia này!

    -------- -------- -------- -------- --------

    Theo như mình thấy thì hình như bạn đang dùng cách biểu diễn một số nguyên thành hệ cơ số 1'000'000'000 (1 tỉ).

    Và mục đích dùng số int64 chính là để khi thực hiện phép nhân 2 số nhỏ hơn 1 tỉ thì không bị tràn biến (trừ bit dấu, 2^63 xấp xỉ 9 x 10^9 x 10^9).

    Theo mình, cách làm này tuy rất thực dụng, nhưng lại hoàn toàn không thích hợp để thực hiện phép chia.

    Bạn có thể làm tiếp bằng cách thực hiện phép chia trong hệ cơ số 1 tỉ, tức là chia từng bước từ trái qua phải số bị chia cho số chia. Nhưng chắc chắn ở mỗi bước sẽ phải dự đoán kết quả, kiểm tra bằng phép nhân và phép so sánh, rồi tùy theo kết quả kiểm tra đó mà thay đổi kết quả (tăng/giảm) thương số, lặp lại cho tới khi được thương số chính xác => rất mệt.

    Mình nghĩ là bạn đừng ngại thay đổi, hãy chuyển biểu diễn thành hệ cơ số 2 đi.

    Một số nguyên sẽ gồm 2 thành phần: 1 biến (bool/integer) chứa dấu, và một mảng Byte chứa bit.

    Về mảng chứa bit này:

    - Nếu ngại thao tác bit thì bạn nhét 1 bit vào một biến Byte (cách này đơn giản hơn khi xử lý chia, nhưng tốn bộ nhớ)

    - Nếu không ngại thao tác bit thì bạn nhét 8 bit vào một biến Byte (Mình nghĩ là nên dùng cách này, khi thực hiện cộng trừ nhân thì bạn coi mỗi phần thử mảng là một số trong hệ cơ số 256, rồi thực hiện phép toán tương ứng trên hệ cơ số 256, khi nào thực hiện chia thì mới coi nó là hệ cơ số 2)

    Việc chia trong hệ cơ số 2 thì quá đơn giản,

    Lấy từng phần của chuỗi bit bị chia (từ trái qua phải) đem so sánh với chuỗi bit chia:

    - Nếu lớn hơn thì đặt kết quả 1, thực hiện phép trừ cơ số 2 các bit đó cho chuỗi bit chia

    - Nếu nhỏ hơn thì đặt kết quả 0

    Ghép thêm 1 bit chưa xử lý vào cuối và lặp lại... Dừng khi chuỗi bit còn lại nhỏ hơn chuỗi bit chia

    Chỉ hơi phức tạp phần xử lý bit, còn phép chia thì cực nhanh!

    Trả lời bởi bix_vix
    ăm trước
    0 0
Những câu hỏi tương tự
Câu hỏi từ Thể loại Máy tính, phần mềm