- 数与连分数
- 2018-06-30 12:08:00 @
#include <iostream>
using namespace std;
void FtoCF(int num1,int num2);
void CFtoF(char str[3],int arr[10000],int sum);
int main()
{
int sum=0,num1=0,num2=0;
int arr[10000];
char str[10000];
cin >> str[0] >> arr[0] >> str[1];
int i=1;
while(str[i]!=']') {
cin >> arr[i] >> str[i+1];
i++;
}
sum=i; //数组长度参数
char chr;
cin >> num1 >> chr >> num2;
CFtoF(str,arr,sum); //连分数转分数
FtoCF(num1,num2); //分数转连分数
return 0;
}
void CFtoF(char str[10000],int arr[10000],int sum) {
int num1=1,num2=0,temp=0;
while(sum!=0) {
temp=num1;
num1=arr[sum-1]*num1+num2;
num2=temp;
sum--;
}
cout << num1 <<'/' << num2 << endl;
}
void FtoCF(int num1,int num2) {
int i=0,temp=0;
int num[10000]={0}; //保存结果的数组
while(num2!=0)
{
num[i]=num1/num2; //使用辗转相除法
temp=num2;
num2=num1-num2*num[i];
num1=temp;
i++;
}
cout << '[' << num[0] << ';'; //输出格式
for(int j=1;j<i;j++) {
if(j!=i-1) {
cout << num[j] << ',';
} else {
cout << num[j];
}
}
cout << ']' << endl;
}