Kết quả 1 đến 3 của 3

Chủ đề: tính N!

  1. #1
    Ngày tham gia
    Aug 2015
    Bài viết
    2

    tính N!

    làm thế nào để tính ổitnngg pascal với N là số lớn. mình nghe nói phải làm trên mảng nhưng chưa biết làm thế nào có ai biết ko giúp mình với

  2. #2
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi quynhlien8513
    làm thế nào để tính ổitnngg pascal với N là số lớn. mình nghe nói phải làm trên mảng nhưng chưa biết làm thế nào có ai biết ko giúp mình với
    Dùng cái trước tính cái sau (gọi quy hoạch động cũng được) :
    Mã:
    var
         gt:array[0..1000] of int64;
         n:word;
    procedure init;
    var i:word;
    begin
            gt[0]:=1;
            for i:=1 to n do
                 gt[i]:=gt[i-1]*i;
    end;
    begin
             write('n=');readln(n);
             init;
             write('Giai thua thu N=',gt[n]);
    end.
    Mình nghĩ là vậy, nếu bạn đưa ra giới hạn cụ thể sẽ dễ dàng hơn!
    Thân!

  3. #3
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Trích dẫn Gửi bởi binhnguyenLQD-kg
    Dùng cái trước tính cái sau (gọi quy hoạch động cũng được) :
    Mã:
    var
         gt:array[0..1000] of int64;
         n:word;
    procedure init;
    var i:word;
    begin
            gt[0]:=1;
            for i:=1 to n do
                 gt[i]:=gt[i-1]*i;
    end;
    begin
             write('n=');readln(n);
             init;
             write('Giai thua thu N=',gt[n]);
    end.
    Mình nghĩ là vậy, nếu bạn đưa ra giới hạn cụ thể sẽ dễ dàng hơn!
    Thân!
    Cách của bạn chỉ giải quyết được trong trường hợp n nhỏ. Nhưng nếu n lớn hơn thì kết quả sẽ lớn, cỡ vài nghìn chữ số (đây đang còn là nhỏ) thì không thể lưu trên mảng như thế được.
    Việc dùng mảng để tính n! là bạn sử dụng mảng để lưu kết quả, mỗi phần tử của mảng là 1 chữ số của kq. Vd với n=5, kq=120 thì mảng cuối cùng sẽ là 1,2,0. Các bước tính như sau:
    đầu tiên, mảng chỉ có 1 chữ số là 1 (0!). Tăng i =>1 tức là tính 1! thì nhân mảng với 1, được mảng mới là 1. Tăng i=>2 nhân mảng với 2 được mảng là 2, cứ như thế tới khi i tới n thì mảng thu được là kết quả cần tìm.
    Việc nhân mảng với 1 số các bạn tiến hành giống như nhân trên giấy các bạn đã được học, để dễ cài đặt, các bạn có thể sử dụng 1 mảng trung gian (như nhân = tay ấy). Và theo kinh nghiệm của mình, nếu bạn xếp ngược mảng kết quả thì nhân dễ hơn, cài đặt gọn hơn. Vd kq là 120 thì bạn lưu là 0,2,1 và nhân ngược từ đầu về cuối.
    Mình chỉ hướng dẫn các bạn cách làm, các bạn thử bắt tay vào làm xem, nếu có gì thắc mắc không hiểu có thể đưa câu hỏi lên.

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
  •