Có một thuật toán để tìm ra những điều sau đây không?Thuật toán để phát hiện số thập phân lặp lại?
- Nếu kết quả của phép chia là số thập phân lặp lại (tính theo hệ nhị phân).
- Nếu nó lặp lại, ở chữ số nào (được biểu thị bằng lũy thừa của 2) thì sự lặp lại có bắt đầu không?
- Chữ số nào lặp lại?
Một số ví dụ:
1/2 = 1/10 = 0.1 // 1 = false, 2 = N/A, 3 = N/A, 4 = N/A
1/3 = 1/11 = 0.010101... // 1 = true, 2 = -2, 3 = 10
2/3 = 10/11 = 0.101010... // 1 = true, 2 = -1, 3 = 10
4/3 = 100/11 = 1.010101... // 1 = true, 2 = 0, 3 = 10
1/5 = 1/101 = 0.001100110011... // 1 = true, 2 = -3, 3 = 1100
Có cách nào để làm điều này? Hiệu quả là một mối quan tâm lớn. Một mô tả của thuật toán sẽ được ưa thích hơn mã, nhưng tôi sẽ đưa ra câu trả lời tôi có thể nhận được.
Điều đáng lưu ý là cơ sở không phải là vấn đề lớn; Tôi có thể chuyển đổi các thuật toán trên để nhị phân (hoặc nếu nó ở, nói cơ sở 256 để sử dụng char
s cho dễ dàng, tôi chỉ có thể sử dụng đó). Tôi nói điều này bởi vì nếu bạn đang giải thích nó có thể được dễ dàng hơn cho bạn để giải thích trong cơ sở 10 :).
Bạn đã sử dụng thêm điều kiện nào để nhận kết quả? Tại sao các chữ số không được lặp lại "01", "01", "10" và "0011"? – Guffa
@Guffa Lý do của tôi là đặt số 1 đầu tiên bởi vì các số 0 đứng đầu không phải là [đáng kể] [1], trong khi các số không theo sau là. Nếu số này giống như "111.010101 ...", số lặp lại sẽ là "01" vì trong trường hợp đó 0 * đầu tiên là * đáng kể. [1]: http: //en.wikipedia.org/wiki/Significant_digits – Imagist
@Guffa (tiếp theo) Điều đó không quan trọng đối với tôi. Nếu bạn nói với tôi làm thế nào để làm điều này trong một cách mà trả về "01", "01", "01" và "0011" tôi sẽ được hạnh phúc. :) – Imagist