c++小数化分数问题

请问代码哪里有问题,不考虑循环小数,小数最多有9位。

img

img

计算分子的do while循环有问题。

while ((long int)a % i == 0) {
        a /= i;
        c--;
    }

你的算法实现思想是没问题的。
计算机能力限制了你。

1.尽可能的升级你的数据类型长度,double 变成 long double(长度取决于编译系统,系统), long int 变成 long long
2.但是由于double能保存的有效数长度有限,会变成科学计数法.
综上所述你这个算法只能 处理有效位数比较小的数。

建议 把整数部分和小数部分 分开作为整形输入,,然后整个算法采用整形数据,,应该能实现你的需求。
(整形只会溢出,不会丢失精度)

  1. 小数输入整型化的公式有问题;
  2. 提取分子部分算法好像不对;
  3. 公因式用噶好像也有问题;
  4. 可能你想复杂了:
  • 一个小数转化为分数,分母是10的(小数位数)次方,分子是小数乘以(小数位数次方)。
  • 分数转化为最简分数,只需要判断分子分母同时整除2,4,8,16,。。。和5,25,125,625,。。。可以设计两个迭代过程加以解决。