将真分数化为埃及分数:

来源:互联网 发布:unity3d粒子系统水流 编辑:程序博客网 时间:2024/05/16 14:11

分子为1的分数称为埃及分数。现输入一个真分数(分子比分母小的分数,叫做真分数),请将该分数分解为埃及分数。如:8/11 = 1/2+1/5+1/55+1/110。

接口说明

 /*
 功能: 将分数分解为埃及分数序列
 输入参数:
     String pcRealFraction:真分数(格式“8/11”)
 返回值:
     String pcEgpytFraction:分解后的埃及分数序列(格式“1/2+1/5+1/55+1/100”)
 */

 public static String  ConvertRealFractToEgpytFract(String pcRealFraction)
 {
  return null;
 }


主要思路是:首先将string转换成int型进行除法运算,类型转换工具a=atoi(str1.c_str())。分数为a/b

(1)看是否能够直接换成埃及分数

(2)如果不能,则i=b/a+1,即减去1/i再进行比较;减去之后a=a*i-b;b=b*i;  

(3)当有特殊情况,如a=3,b为偶数的时候,可以直接化成1/b+1(b/2),3/8=1/4+1/2

#include <iostream>#include <string>using namespace std;void ConvertRealFractToEgpytFract(string s) {    string str1,str2;string result;int i;int len=s.find('/');str1.assign(s,0,len);str2.assign(s,len+1,s.length()-len-1);int a=atoi(str1.c_str());int b=atoi(str2.c_str());int k=0;while(true){if(b%a==0){i=b/a;a=1;}else{i=(b/a)+1;//cout<<"i"<<i<<endl;}if(a==1){cout<< "1/"<<b;break;}else if(a==3&&b%2==0){cout<<"1/"<<(b/2)<<"+"<<"1/"<<b<<endl;break;}else{cout<<"1/"<<i<<"+";}   a=a*i-b;b=b*i;} }int main(){string str;cin>>str;ConvertRealFractToEgpytFract(str);system("pause");return 0;}




0 0