wang_songyi 2017-09-26 15:48 采纳率: 0%
浏览 1093

java小白求问一个和rational number有关的问题

rational

 import java.math.BigInteger;

public class Rational {
 // Data fields for numerator and denominator
 private BigInteger numerator = BigInteger.ZERO;
 private BigInteger denominator = BigInteger.ONE;


 /** Construct a rational with default properties */
 public Rational() {
  this(BigInteger.ZERO, BigInteger.ONE);
 }

 /** Construct a rational with specified numerator and denominator */
 public Rational(BigInteger numerator, BigInteger denominator) {
     BigInteger gcd=new BigInteger(String.valueOf(gcd(numerator, denominator)));
     BigInteger r1=new BigInteger(String.valueOf(denominator.compareTo(BigInteger.ZERO)));
     this.numerator = (r1.multiply(numerator)).divide(gcd);
     this.denominator = (denominator.abs()).divide(gcd);
 }

 /** Find GCD of two numbers */
 private static long gcd(BigInteger n, BigInteger d) {
  BigInteger n1 = n.abs();
  BigInteger n2 = d.abs();
  int gcd = 1;

  for (int k = 1; (new BigInteger(String.valueOf(k))).compareTo(n1)<=0 && (new BigInteger(String.valueOf(k))).compareTo(n2)<=0; k++) {
   if (n1.mod(new BigInteger(String.valueOf(k))).equals(BigInteger.ZERO) && n2.mod(new BigInteger(String.valueOf(k))).equals(BigInteger.ZERO)) 
    gcd = k;
  }

  return gcd;
 }

 /** Return numerator */
 public BigInteger getNumerator() {
  return numerator;
 }

 /** Return denominator */
 public BigInteger getDenominator() {
  return denominator;
 }

 /** Add a rational number to this rational */
 public Rational add(Rational secondRational) {
  BigInteger n = numerator.multiply(secondRational.getDenominator()).add(denominator.multiply(secondRational.getNumerator()));
  BigInteger d = denominator.multiply(secondRational.getDenominator());
  return new Rational(n, d);
 }

 /** Subtract a rational number from this rational */
 public Rational subtract(Rational secondRational) {
     BigInteger n = (numerator.multiply(secondRational.getDenominator())).subtract(denominator.multiply(secondRational.getNumerator()));
     BigInteger d = denominator.multiply(secondRational.getDenominator());
  return new Rational(n, d);
 }

 /** Multiply a rational number to this rational */
 public Rational multiply(Rational secondRational) {
     BigInteger n = numerator.multiply(secondRational.getNumerator());
     BigInteger d = denominator.multiply(secondRational.getDenominator());
  return new Rational(n, d);
 }

 /** Divide a rational number from this rational */
 public Rational divide(Rational secondRational) {
     BigInteger n = numerator.multiply(secondRational.getDenominator());
     BigInteger d = denominator.multiply(secondRational.numerator);
  return new Rational(n, d);
 }

/** Compute the square of this rational number*/
 public Rational square() {
     BigInteger n = numerator.multiply(numerator);
     BigInteger d = denominator.multiply(denominator);
  return new Rational(n, d);
 }

/** toString */
 public String toString() {
      return numerator + "/" + denominator;
 }
}

testrational

 public static void main(String[]args){
        int y = 1;

        BigInteger i=new BigInteger(String.valueOf(1));
        BigInteger a=new BigInteger(String.valueOf(2));
        BigInteger b=new BigInteger(String.valueOf(3));
        BigInteger c=new BigInteger(String.valueOf(5));



        Rational r1 = new  Rational(i,a);
        Rational r2 = new  Rational(a,b);
        Rational r3 = new  Rational(a,c);


        Rational s1 = r3.multiply(r2);
        Rational s2 = r3.square();
        Rational s3 = r2.divide(r3);

        Rational r0 = new  Rational(b,b.add(i));
        do{

            r1 = r1.add(r0);
            b = b.add(a);
            y++;




        }while(y<49);
            System.out.println(r1.multiply(r1));
            System.out.println(s1);
            System.out.println(s2);
            System.out.println(s3);
            System.out.println(r0);
    }
}

这个程序的大概意思就是要在testRational里面计算1/2+3/4+...+99/100
求解为什么我的r0输出的结果为3/4,而不是期望的99/100
为什么循环没有正常的执行?

  • 写回答

1条回答 默认 最新

  • cloudyzhao 2017-09-27 00:51
    关注

    贴下代码吧 图片不好看呀

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)