সমস্যা
গতিশীল মেমরি বরাদ্দ ব্যবহার করে রান টাইমে ব্যবহারকারীর দেওয়া দুটি প্রদত্ত পূর্ণসংখ্যা থেকে ভগ্নাংশের অংশ খুঁজুন এবং স্ট্রিং বিন্যাসে লব এবং হর উপস্থাপন করুন৷
সমাধান
স্ট্রিং বিন্যাসে লব এবং হর উপস্থাপন করার সমাধান নিম্নরূপ -
উদাহরণ -
- ইনপুট নিচে দেওয়া হল -
Numerator1 = 3 Denominator2 = 2 numerator2 = 4 denominator2 = 7
- আউটপুট নিম্নরূপ -
Fractional part1: 1.5 Fractional part2: 0.(571428)
উদাহরণ
স্ট্রিং বিন্যাসে লব এবং হর প্রতিনিধিত্ব করতে নিচে C প্রোগ্রামটি রয়েছে −
#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; }
আউটপুট
যখন উপরের প্রোগ্রামটি কার্যকর করা হয়, তখন এটি নিম্নলিখিত ফলাফল তৈরি করে -
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)