用C语言实现小数转化为最简分数,精度为0.0001
时间: 2024-09-30 11:07:38 浏览: 50
C语言实现小数转分数(包括带循环节小数)
在C语言中,将小数转换为最简分数可以分为两个步骤:首先,我们需要找到小数的循环部分并确定其分母;其次,将非循环部分乘以合适的整数作为分子。这里提供一个基本的思路,假设我们有一个函数`decimal_to_fraction(double num, int precision)`,它接受一个double类型的浮点数和一个表示精度的小数位数:
```c
#include <stdio.h>
#include <math.h>
// 寻找循环节的开始和结束位置
void find循环节(double num, int* start, int* end) {
*start = -1;
double prev_diff = INT_MAX;
while (num >= 0 && prev_diff > 1e-5) {
num *= 10;
int diff = abs(num - floor(num));
if (*start == -1 && diff < 1e-5) {
*start = 1;
} else if (*start != -1 && diff <= prev_diff) {
++*end;
}
prev_diff = diff;
}
}
// 将循环节部分转换成分数形式
double fraction_from_cycle(int length) {
double denominator = pow(10, length);
return 1.0 / denominator;
}
// 主函数
double decimal_to_fraction(double num, int precision) {
int start, end;
find循环节(num, &start, &end);
// 如果没有循环节,直接返回非循环部分的整数部分
if (start == -1) {
return floor(num);
}
double non_cycle_num = num - start + 1);
int non_cycle_int = round(non_cycle_num * pow(10, precision));
// 计算分数(循环部分+非循环部分)
double numerator = non_cycle_int + (fraction_from_cycle(start) * pow(10, precision));
double denominator = pow(10, precision + end - start + 1);
return numerator / denominator;
}
int main() {
double num = 0.666667; // 示例输入
int precision = 4; // 精度为四位小数
double result = decimal_to_fraction(num, precision);
printf("小数 %.4f 转换成分数为 %.2f/%d\n", num, result, (int)result);
return 0;
}
```
阅读全文