21xrx.com
2024-09-19 23:58:05 Thursday
登录
文章检索 我的文章 写文章
C++ 实现小数转分数
2023-06-24 12:26:24 深夜i     --     --
C++ 小数 转换 分数

在数学中,有时需要将一个小数表示成一个分数形式。C++ 是一种具有高效性和灵活性的编程语言,可以轻松地实现小数转分数的算法。下面就介绍一下在 C++ 中如何实现小数转分数。

首先,我们需要了解一个关于小数的性质,即小数可以被转化成无穷循环小数。例如,0.333...可以被表示成 1/3 的形式。因此,将一个小数转化成分数的方法是将其转化成无穷循环小数,然后将循环数字作为分子,循环位数作为分母,即可得到对应的分数表示。

下面是一个 C++ 程序,用于将一个小数转化成分数:


#include<iostream>

#include<cmath>

using namespace std;

int gcd(int x, int y)  //计算最大公约数

{

  return y == 0 ? x : gcd(y, x % y);

}

void decimalToFraction(double num)  //将小数转化为分数

{

  int a = floor(num);  //取整数部分

  num -= a;

  int n = 1e9, d = 1;  //初始化分子分母

  while (num < 1 - 1e-9) //精度误差

  {

    num *= 10;

    n *= 10;

    int t = round(num); //四舍五入取整

    int g = gcd(n, d * t); //求最大公约数

    n /= g;

    d *= t / g;

    num -= round(num);  //保留小数部分

  }

  cout << a * d + n << "/" << d << endl;  //输出结果

}

int main()

{

  double num;

  cout << "请输入一个小数: ";

  cin >> num;

  decimalToFraction(num);

  return 0;

}

程序的具体实现如下:首先,定义一个函数 `gcd` 来计算最大公约数。 然后定义 `decimalToFraction` 函数,将小数转化为分数。 在函数内部,先取小数的整数部分,并将小数减去整数部分。 接着,初始化分子和分母为十亿和一。 然后,通过循环将小数转化为无穷循环小数,并将循环数字作为分子,循环位数作为分母。 最后输出结果。

使用上述代码,可以实现小数转分数,例如将 0.75 转化为分数,其输出为 3/4。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复