#region 分数
//定义分数(Fraction)类:
//(1)成员变量
// 私有字段以及可读可写属性:分子、分母
//(2)成员方法:
// * 打印分数信息(例如: 1 / 3)
// * 约分
// * 创建一个方法交换分子和分母的值
// * 创建一个方法能同时得到加、减、乘、除、求余运算;
class Fraction{
private int numerator;
private int denominator;
public int Numerator{
get{
return numerator;
}
set{
if (value == 0) {
throw new FormatException ("格式异常,分母不能为零");
} else {
numerator = value;
}
}
}
public int Denominator{
get{
return denominator;
}
set{
denominator = value;
}
}
//打印分数信息
public void Print(){
Console.WriteLine ("{0} / {1}",Numerator,Denominator);
}
//求最大公约数 最大公倍数Numerator * Denominator / gsd
public int GCD(){
// 方法一:辗转相除法,最常用的算法
int a = Numerator,b = Denominator;
while (b != 0) {
int c = a % b;
a = b;
b = c;
}
return a;
}
//方法二:
// int min = Numerator < Denominator ? Numerator : Denominator;
// int max = Numerator > Denominator ? Numerator : Denominator;
// if (max % min == 0) { // 该条件也是为下面节省空间而衍生的
// return min;
// }
// int gcd = 0;
// for (int i = 1; i <= min / 2 ; i++) { // min/2节省了运行时间和空间
// if (Numerator % i == 0 && Denominator % i == 0) {
// gcd = i;
// }
// }
// return gcd;
//约分
public void Reduce(){
//方法1:
// for (int i = (Numerator < Denominator ? Numerator : Denominator); i > 1;i--) {
// if (Numerator % i == 0 && Denominator % i == 0) {
// Numerator /= i;
// Denominator /= i;
// }
// }
// Print ();
//方法二:
Numerator /= GCD();
Denominator /= GCD();
Print ();
}
//交换分子分母
public void Swap(){
int temp = Numerator;
Numerator = Denominator;
Denominator = temp;
}
//包含基本运算符
public void MathOperation(Fraction fraction,out Fraction addResult,out Fraction redResult,out Fraction mulResult,out Fraction divResult,out Fraction remResult){
//加法
addResult = new Fraction();
addResult.Denominator = fraction.Denominator * Denominator;
addResult.Numerator = fraction.Denominator * Numerator + fraction.Numerator * Denominator;
addResult.Reduce ();
//减法
redResult = new Fraction();
redResult.Denominator = fraction.Denominator * Denominator;
redResult.Numerator = fraction.Denominator * Numerator - fraction.Numerator * Denominator;
redResult.Reduce ();
//乘法
mulResult = new Fraction();
mulResult.Denominator = fraction.Denominator * Denominator;
mulResult.Numerator = fraction. Numerator * Numerator;
mulResult.Reduce ();
//除法
divResult = new Fraction();
divResult.Denominator = fraction.Denominator * Numerator;
divResult.Numerator = fraction. Numerator * Denominator;
divResult.Reduce ();
//求余
remResult = new Fraction();
remResult.Denominator = fraction.Denominator * Denominator;
remResult.Numerator = (fraction.Denominator * Numerator) % (fraction.Numerator * Denominator);
remResult.Reduce ();
}
}
#endregion
//定义分数(Fraction)类:
//(1)成员变量
// 私有字段以及可读可写属性:分子、分母
//(2)成员方法:
// * 打印分数信息(例如: 1 / 3)
// * 约分
// * 创建一个方法交换分子和分母的值
// * 创建一个方法能同时得到加、减、乘、除、求余运算;
class Fraction{
private int numerator;
private int denominator;
public int Numerator{
get{
return numerator;
}
set{
if (value == 0) {
throw new FormatException ("格式异常,分母不能为零");
} else {
numerator = value;
}
}
}
public int Denominator{
get{
return denominator;
}
set{
denominator = value;
}
}
//打印分数信息
public void Print(){
Console.WriteLine ("{0} / {1}",Numerator,Denominator);
}
//求最大公约数 最大公倍数Numerator * Denominator / gsd
public int GCD(){
// 方法一:辗转相除法,最常用的算法
int a = Numerator,b = Denominator;
while (b != 0) {
int c = a % b;
a = b;
b = c;
}
return a;
}
//方法二:
// int min = Numerator < Denominator ? Numerator : Denominator;
// int max = Numerator > Denominator ? Numerator : Denominator;
// if (max % min == 0) { // 该条件也是为下面节省空间而衍生的
// return min;
// }
// int gcd = 0;
// for (int i = 1; i <= min / 2 ; i++) { // min/2节省了运行时间和空间
// if (Numerator % i == 0 && Denominator % i == 0) {
// gcd = i;
// }
// }
// return gcd;
//约分
public void Reduce(){
//方法1:
// for (int i = (Numerator < Denominator ? Numerator : Denominator); i > 1;i--) {
// if (Numerator % i == 0 && Denominator % i == 0) {
// Numerator /= i;
// Denominator /= i;
// }
// }
// Print ();
//方法二:
Numerator /= GCD();
Denominator /= GCD();
Print ();
}
//交换分子分母
public void Swap(){
int temp = Numerator;
Numerator = Denominator;
Denominator = temp;
}
//包含基本运算符
public void MathOperation(Fraction fraction,out Fraction addResult,out Fraction redResult,out Fraction mulResult,out Fraction divResult,out Fraction remResult){
//加法
addResult = new Fraction();
addResult.Denominator = fraction.Denominator * Denominator;
addResult.Numerator = fraction.Denominator * Numerator + fraction.Numerator * Denominator;
addResult.Reduce ();
//减法
redResult = new Fraction();
redResult.Denominator = fraction.Denominator * Denominator;
redResult.Numerator = fraction.Denominator * Numerator - fraction.Numerator * Denominator;
redResult.Reduce ();
//乘法
mulResult = new Fraction();
mulResult.Denominator = fraction.Denominator * Denominator;
mulResult.Numerator = fraction. Numerator * Numerator;
mulResult.Reduce ();
//除法
divResult = new Fraction();
divResult.Denominator = fraction.Denominator * Numerator;
divResult.Numerator = fraction. Numerator * Denominator;
divResult.Reduce ();
//求余
remResult = new Fraction();
remResult.Denominator = fraction.Denominator * Denominator;
remResult.Numerator = (fraction.Denominator * Numerator) % (fraction.Numerator * Denominator);
remResult.Reduce ();
}
}
#endregion