>백엔드 개발 >C++ >분자와 분모의 숫자를 문자열 형식으로 표현하는 C 프로그램

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

WBOY
WBOY앞으로
2023-09-01 16:41:071441검색

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

Question

런타임 시 사용자가 제공한 두 정수에서 분수 부분을 구하고 동적 메모리 할당을 사용하여 분자와 분모를 문자열 형식으로 표현합니다.

해결 방법

분자와 분모를 문자열 형식으로 표현하는 해결 방법은 다음과 같습니다.

예제 -

  • 입력은 다음과 같습니다.
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 ++] = &#39;-&#39;;
      n += sprintf(&p[n], "%lld", k);
   if (!f) {
      p[n] = 0;
      return p;
   }
   p[n ++] = &#39;.&#39;;
   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 ++] = &#39;(&#39;;
      }
      p[n ++] = &#39;0&#39; + dec[i + 1];
   }
   if (repeat_at != -1) p[n ++] = &#39;)&#39;;
      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("</p><p>Fractional part1: %s </p><p>",fractionToDecimal(n, d));
   printf("enter numerator2 and denominator2:");
   scanf("%d%d",&n,&d);
   printf("</p><p>n = %d, d = %d ", n, d);
   printf("</p><p>Fractional part2: %s</p><p> ",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)

위 내용은 분자와 분모의 숫자를 문자열 형식으로 표현하는 C 프로그램의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제