这篇文章讲述的是算法趣味分数部分的将真分数分解为埃及分数问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。
问题描述
现输入一个真分数,请将该分数分解为埃及分数。真分数,分子小于分母,如1/2,3/5,8/9。埃及分数,古代埃及人在进行分数运算时,只使用分子是1的分数,因此这种分数也叫做埃及分数,或者叫单分子分数。
算法分析
若真分数分子a可以整除分母b,则真分数经过简化就可以得到埃及分数,若真分数的分子不能整除分母,则可以从原来的分数中分解一个分母为(b/a)+1的埃及分数。用这种方法将剩余的部分反复分解,最后可以得到结果。
代码实现
package fraction;
/**
* @author 叶清逸
* @date 2018年7月24日下午11:28:59
* @version 1.0
* @project fraction
*/
public class Q4_TrueFractionToEgyptFraction {
/**
* 问题描述:现输入一个真分数,请将该分数分解为埃及分数。真分数,分子小于分母,如1/2,3/5,8/9。埃及分数,古代埃及人在进行
* 分数运算时,只使用分子是1的分数,因此这种分数也叫做埃及分数,或者叫单分子分数。
*
* 算法分析:若真分数分子a可以整除分母b,则真分数经过简化就可以得到埃及分数,若真分数的分子不能整除分母,则可以从原来的分
* 数中分解一个分母为(b/a)+1的埃及分数。用这种方法将剩余的部分反复分解,最后可以得到结果。
*
*/
public static void main(String[] args) {
/*初始化分数,分子为a,分母为b,c用来保存埃及分数*/
int a = 132 ;
int b = 155 ;
int c ;
/*循环求出埃及分数*/
while(a != 0){
/*若分子不能整除分母,则分解出一个分母为(b/a)+1的埃及分数*/
if(b%a != 0){
c = b/a+1 ;
}else {
c = b/a ;
}
/*如果分子已经是1,则已经是埃及分数,否则输出之后继续分解*/
if(a == 1){
System.out.print(a+"/"+b);
break ;
}else {
System.out.print(1+"/"+c+" ");
}
/*求出余数的分子和分母*/
a = a*c-b ;
b = b*c ;
/*若余数的分子为3,且分母为偶数,输出最后两个埃及分数*/
if(a==3 && b%2==0){
System.out.print(1+"/"+b/2+" "+1+"/"+b);
break ;
}
}
}
}
样例输出
1/2 + 1/3 + 1/14 + 1/231