PDA

View Full Version : chương trình tính toán với số nguyên cực lớn.



nqtz37
16-09-2011, 23:49
Chào các bạn .Mình cần tham khảo ý kiến của các bạn về vấn đề tính toán với các số nguyên cực lớn.dài khoàng vài trang a4.Cộng, trừ, nhân, mũ, mod(chia lấy dư) đều làm được.Còn chia lấy nguyên thì một số kết quả lại sai.Một số lại đúng.Không hiểu thế nào.Mong các bạn giúp cho các trường hợp bị sai.Và biện pháp khắc phục.Thuật toán chia của mình giống như tính chia bằng tay vậy.Chương trình các bạn dow tại đây.http://www.mediafire.com/?v7ticgxby77h7qa
Mong các bạn tư vấn cho.

hoanglinhkd
17-09-2011, 00:20
ủa, bạn viết bằng ngôn ngữ gì sao lại vào .NET mà post bài :D

Van8Hien62
17-09-2011, 13:27
nqtz37 viết bằng VbNet . ( Chỉ có binn file, không có src file ) Bạn muốn góp ý về cái gì ? Về kỹ thuật sử lý string => num ? Dịch ngược mất công lắm ( không đáng với +, -, *, / và mod )

Trong Java, có BigInterger, BigNumber được xây dựng trên cơ sở toán học, cho lấy mod, div, power, .. ( dùng cho các thuật toán mã hóa RSA) rất đáng tham khảo.

Trong dot.Net có những thư viện tương tự dùng cho Big Number

Scripted
20-09-2011, 01:46
Cái này bro muốn test dùm fải kô ? Hay là câu hỏi dzị ?

nqtz37
20-09-2011, 09:25
vâng.Các bạn xem dùm thử có lỗi ơ phần nào không.Nhất là phần phép chia.Khi lấy tới số thứ 2 để chia.Đáng lẽ nếu chia không được thì kết quả bằng 0.Rồi lấy tiếp để xét.Cứ như vậy cho tới hết.Mong các bạn góp ý thuật toán và giải pháp chổ này.À quên cách sử dụng thư viện big number trong vb.net như thế nào.Bạn van8hien62 có thể nói rõ hơn được không.Cách làm của mình hình như chưa được khoa học lắm.Tính toán còn chậm nhất là ở phép nhân ,rất chậm ở lũy thừa các số khủng có chiều dài khoảng 1 trang a4 trở lên.Bạn nào có cách làm tối ưu hơn không .

Van8Hien62
20-09-2011, 16:12
Trong Appendix C. Using the GNU GMP Library của ebook .NET Security and Cryptography, by Peter Thorsteinson, G. Gnana Arun Ganesh, Prentice Hall PTR có nói về cách sử dụng thư viện GNU GMP Library cho The BigRSA Example Program

Link : Thứ trưởng Bộ Y tế tự phong mình là tiến sĩ : GD - DT !
http://tinyurl.com/3bur2g2

Lagi2
21-09-2011, 08:46
Tôi góp ý, buồn cũng chẳng làm gì được tôi.
- Bạn học toán kém, chưa biết làm phép tính, nói gì đến làm toán,
- Bạn lập trình dở, trong class VERRYBIG các hàm đều là public static, các chữ số được lưu bằng mảng chuỗi - dùng bằng mảng ký tự là đủ !
- Bạn thiếu tôn trọng người khác, button : Button5.Text = "nhi phan";
không bị bất hoạt (, disabled : Button5.Enabled = false ) mà chẳng làm gì cả, event handle is Empty, một hàm rỗng.

Cụ thể với :
a = 125; //"125"
b = 0025; //"0025"
kết quả của VeryBig như sau :
a + b => 0150
a - b => -9900
a : b => 0 du 0025
...
"Các bạn xem dùm thử có lỗi ơ phần nào không." !? Có nhiều lỗi, cụ thể hàm :
bool sosanh(string a, string b) {...}
sai bét nhè dẫn đến làm sai như trên, với 2 số VeryTiny cho học sinh Tiểu học làm.

Bạn chưa xử lý được chữ số - digit có nghĩa hoặc '0' vô nghĩa bên trái, không chặn chữ cái - alphabet nhập vào TextBox, thì nói đến VeryBig, đến thuật toán, đến khoa học là hơi vội.

Bạn không đưa source code - upload file exe only - sợ tester lấy cắp mã nguồn ?
Muốn lập kỷ lục về tính toán số "pi", các số khủng có chiều dài khoảng 1 trang a4 trở lên ?
/*
Chọc tức:
- trang A4 với (font) size = 72, thì có chiều dài - số chữ số - là bi nhiêu vậy ta, hay bạn nói size dùng cho pao thi vậy ?
- và CT cho phép sai với phép tính tiểu học. Lớn nhỏ đều là thuật toán
*/

nqtz37
04-10-2011, 21:15
Thank bạn nhiều nhen.khắc phục được rồi.thank tester nhiều

DotNetViet
04-10-2011, 23:08
cái này xử lý xong lâu lắm rồi mà nhểi, h lại dc đào lên

bkkip
14-10-2011, 15:09
bạn ơi ! mình có bài toán này : đổi số A(không quá 100 chữ số) từ cơ số 2 sang cơ số 10. Ban có thể xem xét và cho mình cách làm được không ?

nqtz37
18-10-2011, 10:54
2 sang 10 à.2^0 =1 ,2^1=2,2^2=4.... cứ thế rồi cộng lên.là ra thôi.

dhaudo
24-10-2011, 16:31
chơi mấy trò hại não quá :(

nqtz37
12-11-2011, 20:47
Cái này cũng đơn giản thôi bạn.Cho tất cả vào mảng.phần tủ đầu tiên là 2 mũ 0.phần tử tiếp theo là 2 mũ 1 cứ thế đến hết.Tất cả cộng vào là ra.

Lagi2
24-11-2011, 20:21
Thế giới không phẳng, cụ thể trong máy tính không thể nghĩ thế giới là phẳng được.

đổi số A(không quá 100 chữ số) từ cơ số 2 sang cơ số 10

Cái này cũng đơn giản thôi bạn.Cho tất cả vào mảng.phần tủ đầu tiên là 2 mũ 0.phần tử tiếp theo là 2 mũ 1 cứ thế đến hết.Tất cả cộng vào là ra.
thật là liều mạng !

- A : 100 chữ số cần bao nhiêu bit ? Số lớn nhất trong NNLT là bao nhiêu bit ?
- B : dùng NNLT nào, dùng thư viện nào ( số nguyên cực lớn này ) , phiên bản nào ?

Thật ra BigNumber trong Java đã được xây dựng từ lâu ( Since: JDK1.1 )
/// see : http://docs.oracle.com/javase/1.4.2/docs/api/java/math/BigInteger.html

; trong dotNet muộn hơn ( .NET Framework 4 )
/// see : http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx

Ngồi cộng lại cho đến bao giờ xuất ra được kết quả. Kết quả có đúng không lại là chuyện khác !

thienha20
25-11-2011, 23:24
lập số chiều dài của nhị phân
sonhiphan="nhập từ ngoài vào chieu dai bat ky";
ketqua=0;
i=0;i<chieudai;i++
ketqua=ketqua*2+sonhiphan[i];

==>in ra ketqua(:))
Bạn có thể vào đây xem cách đổi các hệ phân mà rút ra công thức
http://vi.wikipedia.org/wiki/H%E1%BB%87_nh%E1%BB%8B_ph%C3%A2n

Lagi2
26-11-2011, 00:15
chieudai = 99 <ENTER>

Kết quả là bao nhiêu ?
Kết quả đó là sai hay đúng ?