分子と分母の数値を文字列形式で表す C プログラム

WBOY
リリース: 2023-09-01 16:41:07
転載
1408 人が閲覧しました

分子と分母の数値を文字列形式で表す C プログラム

質問

実行時にユーザーが指定した 2 つの整数から小数部を見つけ、動的メモリ割り当ての分子と分母を使用して文字列形式で表します。

解決策

分子と分母を文字列形式で表現する解決策は次のとおりです。

例-

  • 入力は次のとおりです:
Numerator1 = 3
Denominator2 = 2

numerator2 = 4
denominator2 = 7
ログイン後にコピー
  • 出力結果は次のとおりです -
Fractional part1: 1.5
Fractional part2: 0.(571428)
ログイン後にコピー

Example

次はプログラムを記述したものですin C for 分子と分母を文字列形式で表現

#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 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート