/*
- 题目描述
分子为1的分数称为埃及分数。现输入一个真分数(分子比分母小的分数,叫做真分数),请将该分数分解为埃及分数。如:8/11 = 1/2+1/5+1/55+1/110。
注:真分数指分子小于分母的分数,分子和分母有可能gcd不为1!
如有多个解,请输出任意一个。
请注意本题含有多组样例输入!
输入描述:
输入一个真分数,String型
输出描述:
输出分解后的string
示例1
输入
复制
8/11
2/4
输出
复制
1/2+1/5+1/55+1/110
1/3+1/6
说明
第二个样例直接输出1/2也是可以的
a,b互质,其中a<b,则可以进行如此的拆分图片说明 ;则图片说明
算法描述 a/b=a/(a*p+r)=(a*p+r-r+a)/(a*p+r)(p+1)=1/(p+1)+(a-r)/(p+1)(a*p+r)= c=p+1=b/a+1 a'=a-r=a-b%a b'= (a*p+r)(p+1)=b*c
数学家斐波那契提出的一种求解分数的贪心算法,准确的算法表述应该是这样的:
设某个真分数的分子为a,分母为b;
把c=(b/a+1)作为分解式中第一个分数的分母;
将a-b%a作为新的a;
将bc作为新的b;
如果a等于1,则最后一个分数为1/b,算法结束;
如果a大于1但是a能整除b,则最后一个分数为1/(b/a),算法结束;
否则重复上面的步骤 a/b=(1/c)+(a-r)/bc。
*/
import java.util.;
public class Main {
public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext()) { String res = ""; String[] arr = sc.nextLine().split("/"); String pre = ""; int a = Integer.valueOf(arr[0]).intValue(); int b = Integer.valueOf(arr[1]).intValue(); if(a > b || a < 1 || b < 2) break; while(true) { int c = b / a + 1; res += "1/" + c; a = a - b % a; b *= c; res += "+"; if(a == 1) { res += "1/" + b; break; } else if(a > 1 && b%a == 0) { res += "1/" + b/a; break; } } System.out.println(res); } }
}