Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

분자와 분모의 숫자를 문자열 형식으로 표현하는 C 프로그램

<시간/>

문제

동적 메모리 할당을 사용하여 런타임에 사용자가 지정한 두 정수에서 분수 부분을 찾고 분자와 분모를 문자열 형식으로 나타냅니다.

해결책

분자와 분모를 문자열 형식으로 표현하는 솔루션은 다음과 같습니다. -

예시 -

  • 입력 아래에 주어진다 -
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)