


类与对象题不要用太高级句子(最好多些注释) 必须按照他的提示填写 最好附上运行结果 只要测试后没问题 秒通过!
#include <iostream>
#include <iomanip>
#include <string>
#include <stdio.h>
#include <string.h>
#include <math.h>
using namespace std;
class Fraction
{
public:
Fraction(int numer, int denomin)
{
//求最大公约数,得到最简分数
int factor = gcd(abs(numer), abs(denomin));
numerator = numer/factor;
denominator = denomin/factor;
}
double FractionToDecimal()
{
return double(numerator)/double(denominator);
}
void DecimalToFraction(char deci[])
{
numerator = 0;
denominator = 1;
for(int i=0; i<strlen(deci); i++)//每次将小数放大10倍直到得到一个整数
{
if(deci[i]=='-')//判断是否为负数
{
denominator = -1;
}
else if(deci[i]=='.')//找小数点的位置,计算放大倍数
{
denominator *= pow(10, strlen(deci)-1-i);
}
else//得到放大后的最小整数
{
numerator = numerator*10+ (deci[i]-'0');
}
}
//得到最简分数
int factor = gcd(abs(numerator), abs(denominator));
numerator /= factor;
denominator/= factor;
}
//辗转相除,gcd(a,b) = gcd(b,a mod b),当a mod b为0时得到最大公约数b, a>0, b>0
int gcd(int m, int n)
{
if(n==0)
{
return m;
}
return gcd(n, m%n);//递归实现
}
void show()
{
if(numerator*denominator<0)//判断numerator和denominator是否异号
cout<<'-';
cout<<abs(numerator)<<'/'<<abs(denominator);
}
private:
int numerator;
int denominator;
};
int main()
{
int numer, denomin;
char sdeci[50];
cin >> numer >> denomin >> sdeci;
Fraction fr(numer, denomin);
cout << setiosflags(ios::fixed) << setprecision(2);
fr.show();
cout << " " << fr.FractionToDecimal() << " ";
fr.DecimalToFraction(sdeci);
fr.show();
return 0;
}