python埃及分数_C语言将真分数分解为埃及分数代码解析
问题描述
现输入一个真分数,请将该分数分解为埃及分数。
问题分析
真分数:分子比分母小的分数,叫做真分数。真分数的分数值小于1。如1/2,3/5,8/9等。
分子是1的分数,叫单位分数。古代埃及人在进行分数运算时,只使用分子是1的分数。因此这种分数也叫做埃及分数,或者叫单分子分数。如:8/11=1/2+1/5+1/55+1/110。
我们约定分子分母都是自然数,分数的分子用a表示,分母用b表示。
若真分数的分子b能整除分母a,则真分数经过化简就可以得到埃及分数;若真分数的分子不能整除分母,则可以从原来的分数中分解出一个分母为(b/a) +1的埃及分数。用这种方法将剩余部分反复分解,最后可得到结果。
算法设计
真分数分解为埃及分数的思路可归纳如下:
(1) 分数的分子用a表示、分母用b表示,变量c用来存储各个埃及分数的分母。
(2) 如果分母是分子的倍数,直接约简成埃及分数。
此时,埃及分数的分母c=b/a;分子为1,即直接将变量a赋值为1。
(3) 否则分数中一定包含一个分母为(b/a)+1的埃及分数。
若分母不是分子倍数,则可以分解出一个分母为(b/a)+1的埃及分数,即变量c的值 为(b/a)+1。
(4) 如果分子是1,表明已经是埃及分数,不用再分解,结束。
因为若分数的分子a为1,说明此时的分数己经是埃及分数无须再分解,可结束循环。对于这种不受循环条件限制,当某一条件满足时便可结束循环的情况,可用break语句实现。
if (a==1)
{
printf("1/%ld\n", c);
break; /*a为1标志结束*/
}
(5) 如果分子是3而且分母是偶数,直接分解成两个埃及分数1/(b/2)和1/b,结束。因分母为偶数,所以变量b—定是2的倍数,对于分解出的分数1/(b/2)经过约分之后肯定能得到一个埃及分数。原分数分解为两个埃及分数之后便可利用break语句结束循环。
if(a==3 && b%2==0) /*若余数分子为3,分母为偶数,输出最后两个埃及分数*/
{
printf ("1/%ld + 1/%ld\n", b/2, b);
break;
}
6) 从分数中减去这个分母为(b/a)+1的埃及分数,回到步骤(2)重复上述过程。
分解出此埃及分数之后用原分数a/b减去此埃及分数,得到新的分数。此新分数的分子a=a*c-b,分母 b=b*c。
整个程序没有明确的循环条件,所以为了能使循环继续,将循环条件用一个非0的常量表示条件为真。从上述过程可以看出,虽然利用循环条件不能结束循环,当满足某一条件时利用break语句,仍然可以避免程序进入死循环。
对于某一真分数分解为一个以上的埃及分数时最后输出时要求以各分数相加的形式输出,所以在输出语句中“+”作为普通字符输出。
printf ("1/%ld + ", c);
程序流程图:
下面是完整的代码:
#include
int main()
{
long int a, b, c;
printf("请输入可选分数(a/b):");
scanf("%ld/%ld", &a, &b); /*输入分子a和分母b*/
printf("它可以分解为:");
while(1)
{
if(b%a) /*若分子不能整除分母,则分解出一个分母为b/a+1的埃及分数*/
c = b/a + 1;
else /*否则,输出化简后的真分数(埃及分数)*/
{
c = b / a;
a = 1;
}
if(a==1)
{
printf("1/%ld\n", c);
break; /*a为1标志结束*/
}
else
printf("1/%ld + ", c);
a = a * c - b; /*求出余数的分子*/
b = b * c; /*求出余数的分母*/
if(a==3 && b%2==0) /*若余数分子为3,分母为偶数,输出最后两个埃及分数*/
{
printf("1/%ld + 1/%ld\n", b/2, b);
break;
}
}
return 0;
}
运行结果:
linuxidc@linuxidc:~/www.linuxidc.com$ ./linuxidc.com
请输入可选分数(a/b):9/11
它可以分解为:1/2 + 1/4 + 1/15 + 1/660
linuxidc@linuxidc:~/www.linuxidc.com$ ./linuxidc.com
请输入可选分数(a/b):3/4
它可以分解为:1/2 + 1/4
如下图:
python埃及分数_C语言将真分数分解为埃及分数代码解析相关推荐
- Java高次方数尾数输出_C语言求高次方数的尾数代码解析
问题描述 求13的13次方的最后三位数. 问题分析 许多初学者看到本题最容易想到的方法就是:将13累乘13次后截取最后三位即可.但是计算机中存储的整数有一定的范围,超出某范围将不能正确表示,所以用这种 ...
- 将真分数分解为埃及分数(斐波那契算法步骤)Java
package com.patience.interview.huawei;import java.util.Scanner;/*** 将真分数分解为埃及分数* @author Green.Gee* ...
- 华为机试HJ82:将真分数分解为埃及分数
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 分子为1的分数称为埃及分数.现输入一个真分数(分子比分母小的分数,叫做真分数),请将 ...
- 华为OJ平台——将真分数分解为埃及分数
题目描述: 分子为1的分数称为埃及分数.现输入一个真分数(分子比分母小的分数,叫做真分数),请将该分数分解为埃及分数.如:8/11 = 1/2+1/5+1/55+1/110. 输入: 输入一个真分数, ...
- 如何用Java做玫瑰花数_c语言如何输出玫瑰花数?(代码示例)
玫瑰花数又称"四叶玫瑰数",是指四位数各位上的数字的四次方之和等于本身的数. 例如:1634就是一个玫瑰花数1*1*1*1=16*6*6*6=12963*3*3*3=814*4*4 ...
- 玫瑰花数java代码_c语言如何输出玫瑰花数?(代码示例)
玫瑰花数又称"四叶玫瑰数",是指四位数各位上的数字的四次方之和等于本身的数,c语言玫瑰花代码是[int main()int i, j, t;for(i=1000; i<100 ...
- python中sort函数源代码_Python中sort和sorted函数代码解析
Python中sort和sorted函数代码解析 本文研究的主要是Python中sort和sorted函数的相关内容,具体如下. 一.sort函数 sort函数是序列的内部函数 函数原型: L.sor ...
- python 禁用网卡_C#语言实现定时开启或禁用网卡小程序
C#语言实现定时开启/禁用网卡 程序运行效果图 程序实现主要代码 源代码工程文件(VS2013工程文件编译通过) 查看网卡名称附图 1.win7旗舰版运行效果图: 2.程序实现主要代码: /// 网卡 ...
- python解题冒泡排序_C语言简答题汇总
C语言简答汇总 根据网上常见的一些面试题整理,用于考研复试备考,大部分是C语言问答,但不仅仅限于C语言问答,也包括计网和操作系统相关的一些问答,内容如有错误,欢迎指正 1.c语言的特点以及C语言与Py ...
最新文章
- okhttp配置缓存策略_网站的缓存控制策略最佳实践及注意事项
- python 命令行参数-Python命令行参数处理
- 硬件结构(中):EqualLogic PS5000 对等存储“动车组”
- 强烈推荐|我做系统架构的一些原则
- 关于Android手机CPU不同架构的问题
- java学习(24):if..else...if
- ASP.NET MVC的路由
- Java 远程mapduce_java – 如何远程运行mapreduce作业
- 微服务-从设计到部署
- WebStorm生成Vue的组件关系图
- Iso时间转java instant,Java /将ISO-8601(2010-12-16T13:33:50.513852Z)转换为
- 管家婆软件使用在线支付教程
- pdf2cad v12
- DPDK Release 21.05
- 最小二乘拟合曲线证明+正则方程
- 求告知pycharm的这条边界线怎么设置
- 一文掌握Tableau制作透视表/数据表
- 【你真的知道?】凤凰、鸳鸯、石狮的雌雄之分
- 大连的房价很便宜了!
- 这首王维的古诗该如何解析?
热门文章
- 【Python-PyQt5】PyQt5错误提示弹框
- ant vue 表格项上下移动功能
- 安卓9 怎么运行老程序_孩子老走神怎么办?9张图教你培养孩子的注意力!
- oracle全备提示目录名无效,是权限不够,换dba权限用户即可
- vue css渐入渐出,vue中渐进过渡效果实现
- 如何有效提高您的客户服务
- talend导出数据到oracle,Talend使用步骤.pdf
- 微票务v15.8.4演唱会 票务 现场活动
- 抖音上的c语言动态爱心代码,教程:利用Excel 制作 抖音上的心形动态函数图像 ,可以用来表白哈...
- 港科夜闻丨香港科大吴宏伟教授:注重留学生人才培养