Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 19
  1. #1

    Phép chia số nguyên lớn!

    Mình đang làm bài số nguyên lớn. Mình làm được phép cộng, trừ ,nhân rồi nhưng đến phép chia thì hơi búi ....Bạn nào có thể giới thiệu qua cho mình cách làm hay thuật toán phép chia không?
    Không biết hỏi kiểu như thế này có bị xem là phạm quy không nữa. HiHi!
    Bạn nào biết thì giúp mình nhen! Cảm ơn nhiều!

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi pen&pen
    Mình đang làm bài số nguyên lớn. Mình làm được phép cộng, trừ ,nhân rồi nhưng đến phép chia thì hơi búi ....Bạn nào có thể giới thiệu qua cho mình cách làm hay thuật toán phép chia không?
    Không biết hỏi kiểu như thế này có bị xem là phạm quy không nữa. HiHi!
    Bạn nào biết thì giúp mình nhen! Cảm ơn nhiều!
    có phải phép nhân bạn thực hiện cộng dồn không?
    vậy thì phép chia bạn làm ngược lại đi
    trừ cho đến khi nào hiệu nhỏ hơn số trừ thì thôi
    dùng 1 biến đếm lưu số lần thực hiện phép trừ đó chính là thương của phép chia
    Ví dụ:
    15/7 có thể làm như sau:
    15-7=8>7; cout=1
    8-7=1<7 ; cout=2
    Vậy thương của phép chia 15/7 là 2
    Nếu bạn đã làm tốt phép cộng số nguyên lớn thì mình nghĩ phép nhân, chia cũng từ đó mà ra cả
    (post vội vàng còn đi học không bít có chỗ nào sai không????)

  3. #3
    Vậy chẳng lẽ lấy 1.000.000.000 chia cho 2 thì phải thực hiện 500.000.000 lần sao bạn? Phải nghĩ tới phương pháp tối ưu chứ!

  4. #4
    Trích dẫn Gửi bởi long.bkiter07
    Vậy chẳng lẽ lấy 1.000.000.000 chia cho 2 thì phải thực hiện 500.000.000 lần sao bạn? Phải nghĩ tới phương pháp tối ưu chứ!
    không biết áp dụng phép chia đa thức có được không nhỉ?

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Sorry ! Lần trước post vội quá nên chưa nói rõ kiểu làm của mình.
    - Cách lưu trữ:đầu tiên nhập vào kiểu char, sau đó chuyển nó vào một danh sách liên kết(liên kết đôi) , có dùng hàm atoi() trong thư viện string để chuyển kiểu.
    - Phép cộng vÀ trừ làm theo cách truyền thống như hồi cấp 1 mình học ấy, cộng từ phần tử cuối, rồi chuyển dần sang phía bên trái...
    - Phép trừ tương tự
    - Phép nhân thì nhân lần lượt một phần tử rồi cộng lại với nhau
    Đó là mình nói qua loa thế thôi chứ tóm lại là như hồi cấp một mình học ấy.
    Nhưng phép chia thì mình gặp khó khkăn bởi vì chia thì không thể chia từng phần tử như nhân hay cộng trừ được...
    Có ai đã làm bài này rồi ko? Góp ý mình với , mình ko cần code chỉ là hướng dẫn cách làm cũng được, cụ thể vào!
    "Càng cụ thể thì ta càng dẽ hiểu;
    Càng dẽ hiểu thì ta lại càng dễ làm" kekeke
    Cảm ơn trước nhé!

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    có phải phép nhân bạn thực hiện cộng dồn không?
    vậy thì phép chia bạn làm ngược lại đi
    trừ cho đến khi nào hiệu nhỏ hơn số trừ thì thôi
    dùng 1 biến đếm lưu số lần thực hiện phép trừ đó chính là thương của phép chia
    Ví dụ:
    15/7 có thể làm như sau:
    15-7=8>7; cout=1
    8-7=1<7 ; cout=2
    Vậy thương của phép chia 15/7 là 2
    Nếu bạn đã làm tốt phép cộng số nguyên lớn thì mình nghĩ phép nhân, chia cũng từ đó mà ra cả
    (post vội vàng còn đi học không bít có chỗ nào sai không????)
    cũng làm tương tự như bạn này nhưng mình thêm chi tiết này cho nó tối ưu hơn thôi
    VD có số 12345 / 23
    ta xét đầu tiên lấy 2 số của số chia ( 12345)
    được số 12 /23 ==0 vậy ta thêm 1 số nữa để thực hiện phép chia
    123 /123 >0 vậy ta có kết quả đầu tiên là 5
    tiếp tục lây123 ( của số chia ) - 5 nhân với 23

    được dư là 8 + 34 được bao nhiêu lại chia cho 23 tiếp,cứ thế cho đến hết
    hehe cái này thì đúng nghĩa là chia bằng tay roài

    điều kiện cơ bản là bạn phải xây 1 hàm chia 2 số có cùng chữ số hoặc nhiều hơn 1 chữ số VD 12/10 hoặc 123/23 ,phép chia đó dựa vào thuật toán của bạn trên,không biết có cách nào tối ưu hơn không

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Tự làm cho quen đi chứ hỏi gì mà hỏi .Bạn chia bằng cách cứ trừ dần dần .

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Cảm ơn ý kiến định hướng của mọi người!

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi coder_gate
    cũng làm tương tự như bạn này nhưng mình thêm chi tiết này cho nó tối ưu hơn thôi
    VD có số 12345 / 23
    ta xét đầu tiên lấy 2 số của số chia ( 12345)
    được số 12 /23 ==0 vậy ta thêm 1 số nữa để thực hiện phép chia
    123 /123 >0 vậy ta có kết quả đầu tiên là 5
    tiếp tục lây123 ( của số chia ) - 5 nhân với 23

    được dư là 8 + 34 được bao nhiêu lại chia cho 23 tiếp,cứ thế cho đến hết
    hehe cái này thì đúng nghĩa là chia bằng tay roài

    điều kiện cơ bản là bạn phải xây 1 hàm chia 2 số có cùng chữ số hoặc nhiều hơn 1 chữ số VD 12/10 hoặc 123/23 ,phép chia đó dựa vào thuật toán của bạn trên,không biết có cách nào tối ưu hơn không
    Ặc! cái này mà gọi là số nguyên lớn ầ? Buồn cười quá. 12345/23 ? Ha ha, số bé thế này thì anh em là cho hàm đọc vào 2 số a,b rồi gán cho c=float(a/b); cho nó nhanh.

    Còn thế nào là số lớn? Số lớn phải cỡ vài chục đến vài trăm chữ số, chứ còn khoảng 9,10 chữ số thì thôi các bác cứ làm như cái cách "cổ kính" kia của em cho nhanh, chắc là vẫn nằm trong giới hạn tính đó (khai báo là long int là ok).
    À mà còn nữa, làm như cái bác này thì nhập số có khoảng mười mấy chữ số là die luôn chứ máy chẳng có chịu chạy đâu, vượt quá giới hạn mà. Còn thuật toán kia thì phải nói là thật buồn cười (thuật toán dành cho cấc em lớp 1 mới đi học đây mà). Nếu như trong phạm vi tính toán mà lại đi làm theo thuật toán này thì đúng là thừa (so với cách của em thì dài lê thê).

    Thích số lớn thì vào đậy mà download http://forums.congdongcviet.com/showthread.php?t=13791

    Thôi chào các bác!

  10. #10
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi trubavuong
    Ặc! cái này mà gọi là số nguyên lớn ầ? Buồn cười quá. 12345/23 ? Ha ha, số bé thế này thì anh em là cho hàm đọc vào 2 số a,b rồi gán cho c=float(a/b); cho nó nhanh.

    Còn thế nào là số lớn? Số lớn phải cỡ vài chục đến vài trăm chữ số, chứ còn khoảng 9,10 chữ số thì thôi các bác cứ làm như cái cách "cổ kính" kia của em cho nhanh, chắc là vẫn nằm trong giới hạn tính đó (khai báo là long int là ok).
    À mà còn nữa, làm như cái bác này thì nhập số có khoảng mười mấy chữ số là die luôn chứ máy chẳng có chịu chạy đâu, vượt quá giới hạn mà. Còn thuật toán kia thì phải nói là thật buồn cười (thuật toán dành cho cấc em lớp 1 mới đi học đây mà). Nếu như trong phạm vi tính toán mà lại đi làm theo thuật toán này thì đúng là thừa (so với cách của em thì dài lê thê).

    Thích số lớn thì vào đậy mà download http://forums.congdongcviet.com/showthread.php?t=13791

    Thôi chào các bác!
    cậu em chắc là chẳng hiểu gì nên nói hơi có phần lỗ mãng thiếu suy nghĩ...trải qua bao nhiêu chuyện mà không bỏ được cái thói ngựa non háu đá,đúng thật là khó đào tạo,tôi VD thì đương nhiên là phải VD số nhỏ chứ ai dại gì đi đưa số to vào viết làm gì,chỉ là viết để cho mọi người hiểu thôi chứ,thuật toán xây dựng trên chuỗi thì đâu quan trọng gì số to số nhỏ,bao nhiêu chữ số chẳng được,có phải là dạng float,long đâu mà giới hạn chữ số

 

 
Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •