Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 19 kết quả

Đề tài: Lưu số có hàng trăm chữ số->vô hạn???

  1. #1
    Ngày gia nhập
    03 2009
    Nơi ở
    Tứ xứ trên đất sài thành
    Bài viết
    60

    Lightbulb Lưu số có hàng trăm chữ số->vô hạn???

    Sao khi làm bài toán giai thừa--> mình tự hỏi là làm thế nào để tính từ vài trăm giai thừa trở lên và làm thế nào để lưu số từ vài trăm chữ số trở lên và làm thế nào để in màng hình số như thế???? Mong mọi người cùng thảo luận và đưa ra giải pháp!!!

    Càng Học Càng Ngu!!!Kiến thức thì vô tận con người thì vô biên thời gian thì vô đối????...

  2. #2
    Ngày gia nhập
    03 2009
    Nơi ở
    Tứ xứ trên đất sài thành
    Bài viết
    60

    có ai giúp mình không?
    sao không ai tra lời hết vậy!!!

    Càng Học Càng Ngu!!!Kiến thức thì vô tận con người thì vô biên thời gian thì vô đối????...

  3. #3
    Ngày gia nhập
    03 2009
    Nơi ở
    Tứ xứ trên đất sài thành
    Bài viết
    60

    mình mới sưu tầm được ý tưởng này nhưng mà không biết sữ dụng, ý tưởng là chi số cần lưu thành những số có 4 chữ số rồi lưu mỗi số có 4 chữ số ấy vào một phần tử của mảng kiểu int ,muốn int ra thì chỉ cần int mảng kiểu int là ok!!! Nhưng ngặt một nổi là mình tài nào mà chia số có hàng trăm chữ sô thành các số có 4 chữ số??? ai có ý tưởng gì hay thì cứ nêu lên để cùng tham khảo...

    Càng Học Càng Ngu!!!Kiến thức thì vô tận con người thì vô biên thời gian thì vô đối????...

  4. #4
    Ngày gia nhập
    04 2009
    Nơi ở
    Hà Nội
    Bài viết
    42

    Bạn có thể vào đây để tìm hiểu. Cái này nghe trubavuong quảng cáo ghê lắm mà chưa dùng thử.
    Code:http://forums.congdongcviet.com/showthread.php?t=13791
    Hoặc có thể nghiên cứu theo chiều hướng này:
    Trích dẫn Nguyên bản được gửi bởi Ð.Khánh Xem bài viết
    Tại sao các bạn lại lưu mỗi node 1 chữ số thế?

    Muốn cải tiến tốc độc thì lưu mỗi node là 1 số nguyên 4 chữ số.

    Muốn nhanh hơn nữa thì mỗi node là 1 số kiểu int 4 byte, rồi tính toán trên bit. C xây dựng kiểu số nguyên 64 bit = cách ghép 2 số nguyên 32 bit. Thì mình xây dựng kiểu số nguyên lớn, dùng một mảng int cỡ 64 phần tử là có thể tính toán được số lớn tới 2^(64x32) (600 chữ số dec)
    Vậy tức là mỗi số nguyên chỉ tốn nhiều lắm là 400Byte bộ nhớ thôi, dùng cách này rất nhanh mà lại tiết kiệm bộ nhớ.

    ví dụ phép + thực hiện theo cách thường là:
    Visual C# Code:
    1. int carry = 0;
    2. while (...)
    3. {
    4.     carry += a[i] + b[i];
    5.     sum[i] = carry % 10;
    6.     carry /= 10
    7.  
    8.     ++i;
    9. }

    Còn thực hiện theo cách tôi thì:
    Visual C# Code:
    1. unsigned __int64 carry = 0;
    2. while (...)
    3. {
    4.     carry += a[i] + b[i];
    5.     sum[i] = (int) carry;
    6.     carry >>= 32;
    7.  
    8.     ++i;
    9. }

  5. #5
    Ngày gia nhập
    04 2009
    Nơi ở
    Hà Nội
    Bài viết
    42

    Số có vô hạn hay không còn phụ thuộc vào bộ nhớ của máy chạy chương trình này. Như chúng ta đã biết kiểu dữ liệu integer được ứng dụng bên trong hầu hết các ngôn ngữ lập trình. Tuy nhiên, khoảng nguyên bị giới hạn một cách tự nhiên bởi cấu trúc các thanh ghi của CPU. Với số nguyên 4 byte, khoảng nguyên nằm giữa – 2^31 đến 2^31-1 hay -2,147,483,648 đến 2,147,483,647. Khoảng ngày thường không đủ cho các tính toán phức tạp cần có những số nguyên dương hoặc âm rất lớn. Mục đích của chương này là phá vỡ những hạn chế của kiểu dữ liệu nguyên được xây dựng tích hợp sẵn bên trong bằng cách trình bày khái niệm của lớp dữ số nguyên rất lớn.
    Với một kiểu dữ liệu để có thể chứa trong nó một số nguyên dương lớn tùy ý, chúng ta phải tìm ra một phương thức chứa dữ liệu trong bộ nhớ sao cho nó không ảnh hưởng đến việc biểu diễn một số nguyên. Sử dụng một chuỗi các ký tự của số nguyên để biểu diễn một số nguyên dương lớn là một khả năng. Không giống như kiểu số nguyên được xây dựng tích hợp sẵn bên trong chỉ có thể chứa được 4 byte trong bộ nhớ, chúng ta sẽ vượt qua giới hạn này. Bằng cách sử dụng một chuỗi để biểu diễn một số nguyên, chúng ta có thể về lý thuyết làm một chuỗi dài vô hạn tận ( tùy thuộc dung lượng bộ nhớ ). Điều này còn ngầm định rằng, một số nguyên có thể được biểu diễn bởi bất cứ số chữ số nào.
    Chuỗi ký tự chứa đựng số nguyên rất lớn chứa chỉ các ký tự số ‘0’ đến ‘9’. Mỗi chữ số trong chuỗi biểu diễn một chữ số thập phân. Ví dụ, chuỗi “123” sẽ biểu diễn giá trị thập phân 123. Với cách biểu diễn này, các phép toán số học có thể được áp dụng sử dụng các thuật toán xử lý thông thường. Mặc dù đây không phải là cách biểu diễn duy nhất và có thể không phải là cách tốt nhất. Một số cách biểu diễn khác chẳng hạn như biểu diễn nhị phân có thể cần một số thuật toán ít rõ ràng hơn nhằm áp dụng các tính toán số học. Do tính chất đơn giản là mục tiêu chính, chúng ta sẽ lựa chọn cách biểu diễn thập phân.
    Đấy là suy nghĩ của mình, nếu pa thĩ tôi có thể cung cấp một số tài liệu liên quan để nghiên cứu.

  6. #6
    Ngày gia nhập
    03 2009
    Nơi ở
    Tứ xứ trên đất sài thành
    Bài viết
    60

    Mặc định Lưu số có hàng trăm chữ số->vô hạn???

    bạn phân tích giùm code của bạn được không...???
    mình đọc mà không hiểu???

    Càng Học Càng Ngu!!!Kiến thức thì vô tận con người thì vô biên thời gian thì vô đối????...

  7. #7
    Ngày gia nhập
    03 2009
    Nơi ở
    Tứ xứ trên đất sài thành
    Bài viết
    60

    bạn có tài liệu thì share lên cho mình cùng với anh em học hỏi được không...??? cảm ơn bạn nhiều

    Càng Học Càng Ngu!!!Kiến thức thì vô tận con người thì vô biên thời gian thì vô đối????...

  8. #8
    Ngày gia nhập
    04 2009
    Nơi ở
    Hà Nội
    Bài viết
    42

    Uhm.Mình chỉ có tài liệu tiếng anh thoai. Nhưng nó chỉ liên quan đến vấn đề quản lý số nguyên lớn. Các số nguyên lớn trên thực tế được lưu trữ dưới dạng xâu nên có độ dài rất lớn.
    Gần như chỉ có phần cốt lõi chứ không đụng chạm gì đến thuật toán giai thừa đâu.
    http://www.mediafire.com/?sharekey=5...972bd137f89a0e
    À mà nhân tiện ai biết cách up file đính kèm thì chỉ cho mình với nhé.Thanks

  9. #9
    Ngày gia nhập
    06 2007
    Nơi ở
    Nhà trọ
    Bài viết
    49

    Dùng danh sách liên kết. Mỗi nút là 1 chữ số (Kiểu short hay char cũng ổn, nếu không thích thì int mà tương )

    Còn cách tính toán thì cứ như phép cộng hay trừ cho dễ tính. Thì cứ tính toán từ phần từ cuối lên, có nhớ thì +1 hay -1 cho phép tính sau.
    Phép nhân chia chưa nghĩ ra :") (Chắc cách lẹ nhất và dễ nhận ra nhất của phép nhân là liên tục công, còn tốt hơn là làm theo kiểu phép tính hồi bé :P )
    Đã được chỉnh sửa lần cuối bởi dungcoi : 17-05-2009 lúc 04:28 AM.

  10. #10
    Ngày gia nhập
    04 2009
    Nơi ở
    Hà Nội
    Bài viết
    42

    Trích dẫn Nguyên bản được gửi bởi dungcoi Xem bài viết
    Dùng danh sách liên kết. Mỗi nút là 1 chữ số (Kiểu short hay char cũng ổn, nếu không thích thì int mà tương )

    Còn cách tính toán thì cứ như phép cộng hay trừ cho dễ tính. Thì cứ tính toán từ phần từ cuối lên, có nhớ thì +1 hay -1 cho phép tính sau.
    Phép nhân chia chưa nghĩ ra :") (Chắc cách tốt nhất và dễ nhận ra nhất của phép nhân là liên tục công, còn tốt hơn là làm theo kiểu phép tính hồi bé :P )
    Phép nhân là liên tục cộng??
    Bạn lưu í đây là số nguyên lớn. Giả sử bạn thao tác trên số có 30 chữa số. Thì phép nhân của 100 tỷ tỷ tỷ với 100 tỷ tỷ tỷ sẽ phải thực hiện 100 tỷ tỷ tỷ lần. Con lap của mình Core 2 Duo 2.0Ghz tương đương thực hiện 4 tỷ phép tính trên s. Chạy khoảng 7 tiếng là xong. Chắc là như vậy đấy.

Các đề tài tương tự

  1. code bài toán cổ trăm trâu trăm cỏ trên C/C++. Kiểm tra giúp mình
    Gửi bởi tuanlt10 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 7
    Bài viết cuối: 26-12-2012, 09:39 AM
  2. lồng tiếng với thư viện hàng trăm giọng đọc
    Gửi bởi thanhdaica123 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 24-10-2012, 06:08 AM
  3. Bài toán cổ Đàn trâu trăm con có mấy đáp án vậy?
    Gửi bởi muramasa trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 20-06-2011, 03:05 PM
  4. 1 bài nữa về trăm trâu trăm cỏ:
    Gửi bởi Darkpower trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 04-10-2008, 12:39 AM
  5. [C] Xử lý (+ - * /) các số lớn (hàng trăm chữ số chẳng hạn)
    Gửi bởi singO2 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 22-06-2007, 01:49 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn