Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 11
  1. #1
    Ngày tham gia
    Aug 2015
    Bài viết
    3

    [Help] Tính giai thừa của số <= 1000.

    Biết rằng do hạn chế của số nguyên và số thực nên ta chỉ tính đc N! với N nhỏ
    Hãy tìm cách tính 1000!Và viết chương trình tính 1000!
    MỌI NGƯỜI VIẾT HỘ EM ĐC KO!

  2. #2
    Ngày tham gia
    Aug 2015
    Bài viết
    2
    10000! > 1000^9000 = (10^3)^9000 = 10^27000

    10000! chứa không dưới 27000 chữ số.


    Chắc phải có kiểu dữ liệu mới để chứa kết quả này.

  3. #3
    Ngày tham gia
    Nov 2015
    Bài viết
    3
    Các bạn phải dùng phương pháp xử lí số lớn và bổ sung thêm kiểu dữ liệu là: int64.
    Các bạn hãy nghiên cứu đi nha. Những bài toán này rất thú vị. Mà hình như bài này có post lên diễn đàn rồi đấy.

  4. #4
    Ngày tham gia
    Aug 2015
    Bài viết
    3
    Bạn viết CT cho tớ đc ko?thanks [you]

  5. #5
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Trích dẫn Gửi bởi HappySoftGroup
    Các bạn phải dùng phương pháp xử lí số lớn và bổ sung thêm kiểu dữ liệu là: int64.
    Các bạn hãy nghiên cứu đi nha. Những bài toán này rất thú vị. Mà hình như bài này có post lên diễn đàn rồi đấy.
    Hơi mệt rồi đấy, int 64 chưa tính nổi 100! chứ nói gì đến 1000!

  6. #6
    Ngày tham gia
    Aug 2015
    Bài viết
    5
    Bạn dùng kiểu mảng là được thôi. Điều khó ở bài toán này là bạn có viết được code thực hiện phép tính nhân 2 số nguyên cho nhau không (thông qua mảng) chứ không quan trọng có chứa được kết quả không. [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]

  7. #7
    Ngày tham gia
    Aug 2015
    Bài viết
    4
    bạn viết CT cho tớ đc ko?À,các cậu có biết trang'trung tâm tin học IQ'ko?Thầy giáo tớ bảo là:thầy lấy bài ở đó,nhưng tớ tìm bằng google ko thấy?

  8. #8
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    thuquyen thử tự viết code đi, làm như thế bạn sẽ ngấm hơn là đọc code của người khác đấy, hãy thử làm và hỏi nếu bạn mắc ở đâu khôg giải thích được.

  9. #9
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Trích dẫn Gửi bởi sbt2008
    Hơi mệt rồi đấy, int 64 chưa tính nổi 100! chứ nói gì đến 1000!
    Đâu có lấy luôn int64 ra để tính toán luôn đâu bạn. Nếu thế thì cần gì phải thuật toán nữa cho mệt đầu ra?!

  10. #10
    Ngày tham gia
    Aug 2015
    Bài viết
    4
    Max 64000!
    Mã:
    {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+}
    {$M 16384,0,655360}
    {N+,R-,Q-}
    Uses Crt;
    Const maxn = 64000;
    Var n, i : 0..64000;
        a : Array[1..maxn] of 0..9;
        t : Longint;
     
    Procedure xuli;
    Var i, j : 0..64000;
         r, w : longint;
      Begin
          t := 1;
          a[1] := 1;
          j := 2;
          While (j <= n) and (t < maxn) do
            Begin
              r := 0;
              i := 1;
              While (i <= t) or (r <> 0) do
                Begin
                   w := a[i] * j + r;
                   a[i] := w mod 10;
                   r := w div 10;
                   if (r <> 0) and (i = t) then inc(t);
                   inc(i);
                end;      
              inc(j);
            end;
      end;
     
    BEGIN
         ClrScr;
         TextColor(15);
         Write('N = '); Readln(n);
         if (n = 0) or (n = 1) then writeln(n,'!= ',1) else
         if n >= 2 then
         Begin
           xuli;
           Write(n,'!= ');
           for i := t downto 1 do
           write(a[i]);
         end;
         readln;
    END.
    Chúc bạn thành công!

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
  •