PDA

View Full Version : Đổi số thập phân sang phân số?



NoBi
31-08-2006, 11:52 PM
Tôi có đọc 1 thuật giải về cái này thấy rất hay, nhưng trước tiên muốn xem các bạn có giải thuật nào hay hơn về bài toán này. Mời các bạn cùng đưa ra giải thuật của mình thử xem nhé.

n04dethuong
01-09-2006, 08:00 AM
Bạn hãy trình bày giải thuật mà mình biết đi đã , rồi anh em sẽ coi thế nào đã chứ .0:)

hailoc12
01-09-2006, 09:57 AM
Đối với các số thâp phân vô hạn tuần hoàn mình nhớ hồi lớp 9 đã được học các công thức biến đổi nó về phân số tương ứng với trường hợp dãy tuần hoàn có 1, 2, 3... chữ số, nhưng nói chung vẫn chưa tìm được công thức tổng quát.
Vì trong máy tính cũng không biểu diễn được những số kiểu như vậy nên mình xin nêu cách biến đổi cho các số thập phân hữu hạn
Gọi số thập phân đó là a có phần thập phân là b ta đưa về dạng (a*10^b)/(10^b)
Khi đó cả (a*10^b) và (10^b) đều là số nguyên và ta đã đưa được số thập phân a về dạng phân số, giờ chỉ còn việc tối giản nó mà thôi. Để làm việc này ta chỉ cần tìm ước chung lớn nhất của nó và chia từng số cho UCLN đó

hailoc12
25-10-2006, 01:42 AM
Mình tìm được cách tổng quát đây
Chuyển số thập phân tuần hoàn sang phân số
Công thức tổng quát đây:
* Dạng 1: Ví dụ A=0.123123123...
Ta có: p=123, m=3 (123 gồm 3 số)
A=p/(10^m-1)
A=123/(1000-1)
A=123/999
A=41/333
*Dạng 2: Ví dụ A=1.03243636363636...
Ta có: k=1, q=0324=324, n=4 (0324 gồm 4 số), p=36, m=2 (36 gồm 2 số)
A=k+q/10^n+p/(10^n(10^m-1))
A=1+324/10^4+36/(10^4(10^2-1))
A=1+324/10000+36/990000
A=7098/6875

Chuyển số thập phân không tuần hoàn sang phân số

VD 1: A=0.152647975...
1/A=6.551020412 gán A
A-6=0.551020412 gán A
1/A=1.814814804 gán A
A*999=1812.999989 gán A
Làm tròn A=1813
A/999=1813/999=49/27 gán A
1/A=27/49 gán A
A+6=321/49 gán A (hồi nãy trừ 6 thì bây giờ cộng 6)
1/A=49/321 gán A
Kết quả A=0.152647975...=49/321

VD 2: A=1.181913775...
A-1=0.181913775 gán A
1/A=5.497109826 gán A
A-5=0.497109826 gán A
1/A=2.01162791 gán A
A-2=0.01162791 gán A
1/A=85.99997609 gán A
Làm tròn A=86
1/A=1/86 gán A
A+2=173/86 gán A (hồi nãy trừ 2 thì bây giờ cộng 2)
1/A=86/173 gán A
A+5=951/173 gán A (hồi nãy trừ 5 thì bây giờ cộng 5)
1/A=173/951 gán A
A+1=1124/951 gán A (hồi nãy trừ 1 thì bây giờ cộng 1)
Kết quả A=1.181913775...=1124/951
(Nguồn casio.phpbb3.net)

PoPoPoPo
25-10-2006, 07:31 AM
Cái này cũng chỉ dựa vào kinh nghiệm thực tế thôi, chứ chắc không viết được thuật toán bằng C/C++ chứ!

Kevin Hoang
25-10-2006, 08:16 PM
Đối với số thập phân là một số hữu hạn thì việc chuyển sang phân số là khá dễ dàng.
Đối với một số thập phân vô hạn thì về nguyên tắc là không thể chuyển sang phân số được, nhưng trong máy tính mọi số thập phân đều là hữu hạn.

Đối với các số thập phân vô hạn thì ta phải sử dụng số gần đúng thôi.

FaL
31-12-2007, 01:35 AM
Đối với số thập phân là một số hữu hạn thì việc chuyển sang phân số là khá dễ dàng.
Đối với một số thập phân vô hạn thì về nguyên tắc là không thể chuyển sang phân số được, nhưng trong máy tính mọi số thập phân đều là hữu hạn.

Đối với các số thập phân vô hạn thì ta phải sử dụng số gần đúng thôi.

Nguyên tắc trên có lẽ chưa đúng cho lắm. Bởi theo lý thuyết: Mọi số thập phân vô hạn, tuần hoàn đều có thể biễu diễn được dưới dạng phân số m/n với m và n là những số nguyên.

tienlbhoc
31-12-2007, 10:53 AM
vô hạn tuần hoàn có thể đổi sang số được , như trên
Còn hữu hạn , quá dễ ví dụ:
1.23 cho thành 123/100 giản ước đi. Đây là thuật toán dễ nhất đó