描述
定义分子为 1 的分数为埃及分数,例如 2分之1,100分之1 等。
现在,对于给定的一个分子小于分母的分数 ba,请将其分解为若干个不同的埃及分数之和。随后,使用 1/b1+1/b2+⋯+1/bn 的格式输出结果,其中,b1,b2,…,bn 表示每一个埃及分数的分母。
输入描述:
以 a/b 的格式输入一个分数 ba,其中 1≦a<b≦100。不保证分数为最简分数。
输出描述:
以 1/b1+1/b2+⋯+1/bn 的格式输出结果,其中,b1,b2,…,bn 表示每一个埃及分数的分母。
如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
// Write your code here
function egyptianFraction(numerator, denominator) {
let result = []; // 用于存储埃及分数的结果
// 当分子不为0时继续循环
while (numerator !== 0) {
// 找到最大的单位分数
let unitDenominator = Math.ceil(denominator / numerator);
result.push(`1/${unitDenominator}`);
// 更新分子和分母
numerator = numerator * unitDenominator - denominator;
denominator = denominator * unitDenominator;
// 简化分数
let gcdValue = gcd(numerator, denominator);
numerator = numerator / gcdValue;
denominator = denominator / gcdValue;
}
return result.join("+");
}
// 计算最大公约数
function gcd(a, b) {
while (b !== 0) {
let temp = b;
b = a % b;
a = temp;
}
return a;
}
let line = (await readline()).split("/").map(Number);
console.log(egyptianFraction(line[0], line[1]));
})();