#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
// 手动实现 GCD 函数
int gcd(int a, int b) {
while (b != 0) {
int t = b;
b = a % b;
a = t;
}
return a;
}
// 函数用于计算分数
void decimalToFraction(double decimal, int cycleLength) {
if (cycleLength == 0) {
// 当没有循环节时
int denominator = 1;
while (decimal != static_cast<int>(decimal)) {
decimal *= 10;
denominator *= 10;
}
int numerator = static_cast<int>(decimal);
// 约分
int divisor = gcd(numerator, denominator);
numerator /= divisor;
denominator /= divisor;
cout << "分数形式: " << numerator << "/" << denominator << endl;
} else {
// 当有循环节时
string cycle;
cout << "请输入小数的循环节(不带小数点): ";
int temp3;
cin>>temp3;
cycle=temp3;
int temp=pow(10,cycleLength);
float d2=decimal*temp+decimal;
float temp2=d2-decimal;
for(int i=temp3;i>0;i--){
if((temp-1)%i==0&&temp3%i==0){
temp=(temp-1)/i;
temp3=temp3/i;
break;
}
}
cout<<temp3<<"/"<<temp;
}
}
int main() {
double decimal;
int cycleLength;
cout << "请输入一个小数: ";
cin >> decimal;
cout << "请输入小数的循环节长度(没有循环节输入0): ";
cin >> cycleLength;
decimalToFraction(decimal, cycleLength);
return 0;
}
草稿本,什么也没有
于 2024-10-08 13:20:20 首次发布