Vấn đề
Tìm phần phân số từ hai số nguyên nhất định do người dùng cung cấp tại thời điểm chạy bằng cách sử dụng phân bổ bộ nhớ động và biểu diễn tử số và mẫu số ở định dạng chuỗi.
Giải pháp
Giải pháp để biểu diễn tử số và mẫu số ở định dạng chuỗi như sau -
Ví dụ -
- Đầu vào được đưa ra bên dưới -
Numerator1 = 3 Denominator2 = 2 numerator2 = 4 denominator2 = 7
- Đầu ra như sau -
Fractional part1: 1.5 Fractional part2: 0.(571428)
Ví dụ
Sau đây là chương trình C để biểu diễn tử số và mẫu số ở định dạng chuỗi -
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> char* fractionToDecimal(int numerator, int denominator) { char *p; int psz, n, *dec, dsz, x; long long num, den, k, f; int i, repeat_at; int neg = 0; psz = dsz = 100; n = x = 0; p = malloc(psz * sizeof(char)); //assert(p); neg = ((numerator > 0 && denominator < 0) || (numerator < 0 && denominator > 0)) ? 1 : 0; num = numerator; den = denominator; num = (num < 0) ? -num : num; den = (den < 0) ? -den : den; k = num / den; f = num % den; if (neg && (k || f)) p[n ++] = '-'; n += sprintf(&p[n], "%lld", k); if (!f) { p[n] = 0; return p; } p[n ++] = '.'; dec = malloc(dsz * sizeof(int)); repeat_at = -1; if (f < 0) f = -f; while (f) { for (i = 0; i < x; i += 2) { if (dec[i] == f) { repeat_at = i; goto done; } } if (x + 1 >= dsz) { dsz *= 2; dec = realloc(dec, dsz * sizeof(int)); } dec[x ++] = f; f *= 10; k = f / den; dec[x ++] = k; f = f % den; } done: for (i = 0; i < x; i += 2) { if (n + 3 > psz) { psz *= 2; p = realloc(p, psz * sizeof(char)); } if (repeat_at == i) { p[n ++] = '('; } p[n ++] = '0' + dec[i + 1]; } if (repeat_at != -1) p[n ++] = ')'; p[n ++] = 0; free(dec); return p; } int main(void){ int n,d; printf("enter numerator1 and denominator1:"); scanf("%d%d",&n,&d); printf("n = %d, d = %d ", n, d); printf("\nFractional part1: %s \n",fractionToDecimal(n, d)); printf("enter numerator2 and denominator2:"); scanf("%d%d",&n,&d); printf("\nn = %d, d = %d ", n, d); printf("\nFractional part2: %s\n ",fractionToDecimal(n, d)); return 0; }
Đầu ra
Khi chương trình trên được thực thi, nó tạo ra kết quả sau -
enter numerator1 and denominator1:4 5 n = 4, d = 5 Fractional part1: 0.8 enter numerator2 and denominator2:5 9 n = 5, d = 9 Fractional part2: 0.(5)