埃及分数怎么计算java_[蓝桥杯][java]埃及分数解法

import java.util.Scanner; /*  *  标题:埃及分数     古埃及曾经创造出灿烂的人类文明,他们的分数表示却很令人不解。古埃及喜欢把一个分数分解为类似: 1/a + 1/b 的格式。     这里,a 和 b 必须是不同的两个整数,分子必须为 1     比如,2/15 一共有 4 种不同的分解法(姑且称为埃及分解法):         1/8 + 1/120         1/9 + 1/45         1/10 + 1/30         1/12 + 1/20     那么, 2/45 一共有多少个不同的埃及分解呢(满足加法交换律的算同种分解)? 请直接提交该整数(千万不要提交详细的分解式!)。  [思路]  由于埃及分数都是以1为分子的,因此,假设最初的分数为A/B,那么如果A能够整除B,则埃及数为1/(B/A)  如果不能够整除时,能够从其中分离出来的最大的分子为1的分数就是1/((A/B)+1)  以2/7为例,能够从中分离出来的最大的分子为1的数是1/(7/2+1) = 1/4  分离出此数之后,再计算出剩下的余数,重复进行以上的判断即可    [算法]  1. 要求用户输入分子a,分母b  2. 判断a是否能够整除b      是: 将a置为1,b置为b/a  3. 判断a是否为1              是:               直接输出a/b, 退出循环             否:                 得到小于它的最大的埃及分数的分母 C = A / B + 1                       得到余数的分子:  A*C-B                 得到余数的分母:  B*C  4. 返回2继续循环    [运行结果]  请输入一个分数的分子 2 请输入一个分数的分母 45 2/45=1/23+1/1035 可分解为埃及数的个数为: 2  * */ public class EmptyNumber {     public static void main(String[] args) {         /*读入用户输入的分子与分母*/         System.out.println("请输入一个分数的分子");         Scanner scanner = new Scanner(System.in);         int fenZi = scanner.nextInt();         System.out.println("请输入一个分数的分母");         scanner = new Scanner(System.in);         int fenMu = scanner.nextInt();                  /*设置埃及数的计数器*/         int total = 0;                  System.out.print(fenZi+"/"+fenMu+"=");         while(true){             /*如果分子能够整除分母,则对原分数进行约分 , 保持分子为1*/             if(fenMu%fenZi==0)                 { fenMu = fenMu / fenZi;fenZi = 1;}                          /*分子为1时,直接输出结果,中止循环*/             if(fenZi==1)                 {                   System.out.print(fenZi+"/"+fenMu);                   total++;                   break;                 }             else                {                 /*保留原有的分子与分母的值*/                 int m = fenMu;                 int z = fenZi;                                  /*得到比当前分数小的最大埃及分数的分母,并输出找到的最大埃及数*/                 int num = fenMu / fenZi + 1;                 System.out.print(1+"/"+num+"+");                 total++;                 /*得到余数的分子与分母,继续循环*/                 fenMu = m * num;                 fenZi = z*num - m;                }                      }         System.out.println();        System.out.println("可分解为埃及数的个数为: "+total);               } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值