c语言 小数化为分数
时间: 2024-03-07 07:45:39 浏览: 38
以下是两种C语言将小数转换为分数的算法:
1. 使用辗转相除法[^1]
```c
#include <stdio.h>
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
void decimalToFraction(double decimal) {
int numerator = decimal * 1000000; // 将小数转换为整数
int denominator = 1000000;
int commonDivisor = gcd(numerator, denominator); // 求最大公约数
numerator /= commonDivisor; // 分子除以最大公约数
denominator /= commonDivisor; // 分母除以最大公约数
printf("Fraction: %d/%d\n", numerator, denominator);
}
int main() {
double decimal = 0.75;
decimalToFraction(decimal); // 输出:Fraction: 3/4
return 0;
}
```
2. 使用C++中的类
```cpp
#include <iostream>
#include <string>
#include <cmath>
class Fraction {
private:
int numerator;
int denominator;
public:
Fraction(double decimal) {
int power = 0;
while (decimal * pow(10, power) != round(decimal * pow(10, power))) {
power++;
}
numerator = decimal * pow(10, power);
denominator = pow(10, power);
int commonDivisor = gcd(numerator, denominator);
numerator /= commonDivisor;
denominator /= commonDivisor;
}
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
void printFraction() {
std::cout << "Fraction: " << numerator << "/" << denominator << std::endl;
}
};
int main() {
double decimal = 0.75;
Fraction fraction(decimal);
fraction.printFraction(); // 输出:Fraction: 3/4
return 0;
}
```