Cho tử số và mẫu số, chuyển thành chuỗi thập phân. Nếu phần thập phân vô tận lặp, đặt phần lặp trong ngoặc đơn. Ví dụ: 4/5 = 0.8; 5/9 = 0.(5); 4/7 = 0.(571428).
Giải thuật
- Xử lý dấu âm, phần nguyên
- Dùng mảng dec[] lưu dư (remainder) và chữ số thương tương ứng
- Khi gặp dư lặp lại → đánh dấu vị trí lặp
- Xây dựng chuỗi kết quả, chèn '(' và ')' tại vị trí lặp
- Dùng malloc/realloc cho bộ nhớ động
Chương trình
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
char* fractionToDecimal(int numerator, int denominator) {
// Xử lý dấu, phần nguyên, phần dư
// Dùng mảng dec[] lưu (remainder, digit) để phát hiện chu kỳ
// Xây dựng chuỗi kết quả với ngoặc đơn cho phần lặp
// (Xem mã nguồn đầy đủ trong nội dung gốc)
}
int main(void) {
int n, d;
printf("enter numerator1 denominator1: "); scanf("%d%d", &n, &d);
printf("Fractional part1: %s\n", fractionToDecimal(n, d));
printf("enter numerator2 denominator2: "); scanf("%d%d", &n, &d);
printf("Fractional part2: %s\n", fractionToDecimal(n, d));
return 0;
}
Kết quả
4/5 → 0.8 5/9 → 0.(5)