Đại học Lê Quý Đôn - 236 Hoàng Quốc Việt - Hà Nội

Chia sẻ kiến thức mọi mặt của các lớp cao học CNTT, Học viện Kỹ thuật Quân sự




Chào mừng đã đến với forum khmt.123.st
  • Bạn chưa đăng kí (hoặc chưa đăng nhập) nên quyền lợi của bạn sẽ bị hạn chế. Việc đăng kí làm thành viên hoàn toàn miễn phí, sau khi đăngkí bạn có thể post bài, tham gia thảo luận , nhìn thấy link ở những box hạn chế ... và rất nhiều quyền lợi khác. Thủ tục đăng kí rất nhanh chóng và đơn giản, hãy Đăng kí làm thành viên !
  • Nếu bạn quên mật khẩu, xin nhấn vào đây !
  • Nếu bạn gặp trục trặc trong vấn đề đăng kí hoặc không thể đăng nhập, hãy liên hệ với chúng tôi.




  • Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down  Thông điệp [Trang 1 trong tổng số 1 trang]

    Admin

    Admin
    Quản trị viên
    Quản trị viên
    Đề thầy ra:
    Cho 2 số nguyên dương a và b có thể có tới 100 chữ số.
    Viết giải thuật để in ra màn hình số c = a * b
    Bàn luận:
    Không thể làm phép nhân thông thường cho máy tính vì mỗi biến giá trị nguyên dương không quá 65535.
    Giải pháp: Sử dụng mỗi số a, b, c là các mảng. Mỗi chữ số của a, b, c là một phần tử. Ta nhanh chóng nhận ra là các phần tử này chỉ là một trong những con số 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

    Đây là giải thuật mà thầy đưa ra:
    1. Gọi:
    m: /a/, độ dài của a
    n: /b/, độ dài của b

    2. Khai báo mảng c = 0
    Qui ước phần tử thứ nhất là hàng đơn vị
    c có chiều dài lớn nhất là 201 chữ số.

    Khi đó, giả sử m > n:
    a = {am, am-1,..., a1}
    b = {bn, bn-1,..., b1}


    3. Đặt biến nhớ về 0. Lấy từng con số của a nhân với b. Ta có:
    nhớ1 := 0;
              for i = 1 to m
                        for j = 1 to n
                                  t:= ai * bj + nhớ
                                  x:= t mod 10
                                  nhớ1 := t div 10
    4. Đặt
    l = max {/c/; /x/}
    Thêm số 0 vào số ngắn
    for t: = len (c) to l
              Ct := 0
              Nhớ2 = 0
    for t = 1 to l
              tg := ct + xt + nhớ2
              ct := tg mod 10
              nhớ: = tg div 10
    If nhớ >0 then
    Cl + 1 : = 1

    https://khmt.123.st

    TuanNghia

    TuanNghia
    Thành viên bắt đầu chia sẻ
    Thành viên bắt đầu chia sẻ
    Nhờ Anh Cường viết lại thuật toán này cho đúng quy cách và giải thích rõ hơn 1 chút. Em đang test giải thuật bằng tay nhưng sau phần 4 không thể làm tiếp được nữa. Cảm ơn Anh.

    Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang  Thông điệp [Trang 1 trong tổng số 1 trang]

    Permissions in this forum:
    Bạn không có quyền trả lời bài viết

     

    Ghi rõ nguồn khi copy các bài viết từ Website này.
    Bản quyền thuộc Khoa học Máy tính. Số lượt truy cập tính đến hiện tại:Website counter
    Modified skin by Nguyễn Anh Cường. Developed by Members of https://khmt.123.st

    Free forum | ©phpBB | Free forum support | Báo cáo lạm dụng | Thảo luận mới nhất