P65-将真分数分解为埃及分数
2015-04-04 11:45
162 查看
/* * 31.cpp * Created on: 2015年4月4日 * Author: jtahstu */ //31将真分数分解为埃及分数 //分子为1 的分数称为埃及分数,现输入一个真分数,请将该分数分解为埃及分数。 //如:8/11=1/2+1/5+1/55+1/110。 // //*运行结果 //1. Please enter a optional fraction (a/b): 1/6 //It can be decomposed to: 1/6 //2. Please enter a optional fraction (a/b): 20/33 //It can be decomposed to: 1/2+1/10+1/165 //3. Please enter a optional fraction (a/b): 10/89 //It can be decomposed to: 1/9+1/801 //4. Please enter a optional fraction (a/b): 19/99 //It can be decomposed to: 1/6+1/40+1/3960 //5. Please enter a optional fraction (a/b): 8/89 //It can be decomposed to: 1/11+1/957 //*问题分析与算法设计 //若真分数的分子a能整除分母b,则真分数经过化简就可以得到埃及分数, //若真分数的分子不能整除分母,则可以从原来的分数中分解出一个分母为b/a+1的埃及分数。 //用这种方法将剩余部分反复分解,最后可得到结果。<span id="transmark"></span> #include<iostream> #include<cstdio> using namespace std; int main31() { long int a, b, c; while (true) { cin >> a >> b; while (true) {//这里只要不遇到break,就一直在循环,直到结束 if (b % a) /*若分子不能整除分母*/ c = b / a + 1; /*则分解出一个分母为b/a+1的埃及分数*/ else { c = b / a; a = 1; } /*否则,输出化简后的真分数(埃及分数)*/ if (a == 1) { printf("1/%ld ", c); break; /*a为1标志结束*/ } else printf("1/%ld + ", c); a = a * c - b; /*求出余数的分子*/ b = b * c; /*求出余数的分母*/ if (a == 3) /*若余数为3,输出最后两个埃及分数*/ { printf("1/%ld + 1/%ld ", b / 2, b); break; } } } return 0; }
相关文章推荐
- 将真分数分解为埃及分数
- 将真分数分解为埃及分数
- 将真分数分解为埃及分数
- 华为OJ平台——将真分数分解为埃及分数
- 将真分数分解为埃及分数
- 把一个真分数分解为埃及分数(分子为1)
- 华为oj初级 将真分数分解为埃及分数
- 埃及分数 把一个分数分解成n个 m分之一的方式
- 分数趣题(将真分数分解为埃及分数)
- 华为OJ(将真分数分解为埃及分数)
- (百例编程)45.真分数分解为埃及分数
- 埃及分数 把一个分数分解成n个 m分之一的形式
- 将真分数分解为埃及分数
- 华为OJ 初级:将真分数分解为埃及分数
- 将真分数分解为埃及分数
- 『每日一题 2012-04-18』将真分数分解为埃及分数
- 将真分数分解为埃及分数
- 将真分数分解为埃及分数
- 埃及分数 把一个分数分解成n个 m分之一的形式
- 华为oj 将真分数分解为埃及分数