思路:
重复问题,利用递归去解,每次运算的真分数在发生变化。
代码:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
void recursion(int a, int b) {
if (a == 1)
{
cout << a << '/' << b << endl;
return;
}
//因为当b%(a−1)=0b \% (a-1) = 0b%(a−1)=0时,
//有a/b=1/(b/(a−1))+1/ba/b=1/(b/(a-1)) + 1/ ba/b=1/(b/(a−1))+1/b,可以直接分解成两个
if (b % (a-1)== 0) {
cout << 1 << "/" << b / (a - 1) << "+";
a = 1;
}
else {
int c = b / a;
cout << 1 << '/' << c + 1 << '+';
a = a - b % a;
b = b * (c + 1);
if(b%a==0){
b=b/a;
a=1;
}
}
recursion(a, b);
return;
}
int main() {
string s;
int a;
int b;
while (cin >> s) {
for (int i = 0; i < s.size(); i++) {
if (s[i] != '/')continue;
else {
a = stoi(s.substr(0, i));
b = stoi(s.substr(i + 1, s.size() - i - 1));
break;
}
}
recursion(a, b);
}
}