8.4埃及分数

埃及分数

注意用到:double型扩大倍数才能和0直等于比较

法一:通过比较确定每次减去所能减掉的最大分数
代码:

import java.util.Scanner;
public class eighty {
 public static void main(String[] args) {
  Scanner reader=new Scanner(System.in);
  String s=reader.next();
  String p[]=s.split("/");
  int n1=Integer.parseInt(p[0]);
  int n2=Integer.parseInt(p[1]);
  double n=(double)n1/(double)n2;
  double m=n;
  double k=2;
  System.out.printf(n1+"/"+n2+"=");
  while(m>0) {
            if(1/k<=m) {
    m-=(1/k);
    if((int)(1000000000*m)==0) {//double型扩大倍数才能和0直等于比较
     System.out.printf("1/%d",(int)k);
    }
    else {
     System.out.printf("1/%d+",(int)k);
    }
   }
   k++;
  }
 }
}

运行结果:
在这里插入图片描述
法二:通过数学推导推出每次能减去的最大分数
在这里插入图片描述

代码:

import java.util.Scanner;
public class onehundred {
	public static void main(String[] args) {
		Scanner reader=new Scanner(System.in);
		String s=reader.next();
		String p[]=s.split("/");
		int n1=Integer.parseInt(p[0]);
		int n2=Integer.parseInt(p[1]);
		double n=(double)n1/(double)n2;
		System.out.printf(n1+"/"+n2+"=");
		if(n1==1||n2%n1==0) {
			System.out.printf("1/"+n2/n1);
		}
		else {
			int C=n2/n1+1;
			if(n>1/C) {
				System.out.printf("1/%d",C);
				n=n-1/C;
				n1=n1*C-n2;
				n2=n2*C;
				C=n2/n1+1;
			}
			while(n2%n1!=0) {
				System.out.printf("+1/%d",C);
				n=n-1/C;
				n1=n1*C-n2;
				n2=n2*C;
				C=n2/n1+1;
			}
			System.out.printf("+1/%d",n2/n1);
		}
	}
}

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值