题目:将真分数分解为埃及分数
描述 | |
---|---|
知识点 | 字符串 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 输入一个真分数,String型 |
输出 | 输出分解后的string |
样例输入 | 8/11 |
样例输出 | 1/2+1/5+1/55+1/110 |
若真分数的分子a能整除分母b,则真分数经过化简就可以得到埃及分数,若真分数的分子不能整除分母,则可以从原来的分数中分解出一个分母为b/a+1的埃及分数。用这种方法将剩余部分反复分解,最后可得到结果。
网上大多都是这种解法,可能就是一个规律题,前面还好懂,对a=3情况的单独处理不是太懂,下面是代码:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s,sn,sd;
int a,b,c;
cin>>s;
size_t index=s.find_first_of('/');
sn=s.substr(0,index);
sd=s.substr(index+1,s.size()-index-1);
a=atoi(sn.c_str());
b=atoi(sd.c_str());
while(1)
{
if(b%a)
c=b/a+1;
else
{
c=b/a;
a=1;
}
if(a==1)
{
cout<<"1/"<<c;
break;
}
else
{
cout<<"1/"<<c<<"+";
}
a=a*c-b;
b=b*c;
if(a==3)
{
cout<<"1/"<<b/2<<"+"<<"1/"<<b;
break;
}
}
//system("pause");
return 0;
}