ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java课堂作业第十一周

2021-06-07 10:33:08  阅读:248  来源: 互联网

标签:BigInteger return 第十一 课堂作业 imaginaryPart Complex Rational java public


题目

第一题

Complex类,设计一个名为complex的类来表示复数以及完成复数运算的add,subs tract,multiply,divide和abs方法,并且覆盖tostring方法以返回一个表示复数的字符串

第二题

在Rational类中使用BigInteger,使用BigInteger表示分子和分母,重新设计和实现Rational类

第三题

打印Collatz练习题中100万以内产生序列最长的五个数字,以及这五个数字产生的collatz序列数值。

代码

package ch11;

import javax.swing.*;
import java.util.Scanner;

import java.math.RoundingMode;
import java.math.BigDecimal;
public class a {
    public static void main(String[] args) {
        System.out.print("Enter the first complex number: ");
        Scanner input = new Scanner(System.in);
        double real_1 = input.nextDouble();
        double imaginary_1 = input.nextDouble();
        Complex c_1 = new Complex(real_1, imaginary_1);
        System.out.print("Enter the second complex number:");
        //double real_2 = input.nextDouble();
        //double imaginary_2 = input.nextDouble();
        Complex c_2 = new Complex(input.nextDouble(), input.nextDouble());
        System.out.println(c_1.toString() + " + " + c_2.toString() + " = " + c_1.add(c_1, c_2));
        System.out.println(c_1.toString() + " - " + c_2.toString() + " = " + c_1.substract(c_1, c_2));
        System.out.println(c_1.toString() + " * " + c_2.toString() + " = " + c_1.multiply(c_1, c_2));
        System.out.println(c_1.toString() + " / " + c_2.toString() + " = " + c_1.divide(c_1, c_2));
        System.out.println( " |"+c_1.toString() + " | ="   + c_1.abs(c_1));
    }
}


class Complex implements Cloneable {
    //dataField
    private double realPart;
    private double imaginaryPart;

    //constructor
    public Complex() {
        realPart = 0;
        imaginaryPart = 0;
    }

    public Complex(double a) {
        realPart = a;
    }

    public Complex(double a, double b) {
        realPart = a;
        imaginaryPart = b;
    }

    //accessor
    public double getRealPart() {
        return realPart;
    }

    public double getImaginaryPart() {
        return imaginaryPart;
    }

    //method
    public Complex add(Complex a, Complex b) {
        Complex tempC = new Complex(a.realPart + b.realPart, a.imaginaryPart + b.imaginaryPart);
        return tempC;
    }

    public Object substract(Complex a, Complex b) {
        Complex tempC = new Complex(a.realPart - b.realPart, a.imaginaryPart - b.imaginaryPart);
        return tempC;
    }

    public Complex multiply(Complex a, Complex b) {
        Complex tempC = new Complex(a.realPart * b.realPart - a.imaginaryPart * b.imaginaryPart, a.realPart * b.imaginaryPart + a.imaginaryPart * b.realPart);
        return tempC;
    }

    public Complex divide(Complex a, Complex b) {
        double tempA = a.realPart * b.realPart + a.imaginaryPart * b.imaginaryPart;
        double tempB = a.imaginaryPart * b.realPart - a.realPart * b.imaginaryPart;
        double temp = Math.pow(b.imaginaryPart, 2) + Math.pow(b.realPart, 2);
        Complex tempC = new Complex(tempA / temp, tempB / temp);
        return tempC;
    }

    public double abs(Complex a) {
        return Math.sqrt(a.realPart * a.realPart + a.imaginaryPart * a.imaginaryPart);
    }

    @Override
    public String toString() {
        //if (this.realPart == 0 && this.imaginaryPart != 0) return formatDouble(imaginaryPart) + "i";
        if (this.imaginaryPart > 0) return formatDouble(realPart) + "+" + formatDouble(imaginaryPart) + 'i';
        else if (this.imaginaryPart < 0) return formatDouble(realPart) + "+" + formatDouble(imaginaryPart) + 'i';
        else return "" + formatDouble(realPart);
    }

    @Override
    public Complex clone() {
        Complex tempC;
        try {
            tempC = (Complex) super.clone();
        } catch (CloneNotSupportedException ex) {
            return null;
        }
        return tempC;
    }

    //美化浮点显示
    public static String formatDouble(double d) {
        BigDecimal bg = new BigDecimal(d).setScale(2, RoundingMode.UP);
        double num = bg.doubleValue();
        if (Math.round(num) - num == 0) {
            return String.valueOf((long) num);
        }
        return String.valueOf(num);
    }
}

package ch11;

import java.math.BigInteger;

public class b {
    public static void main(String[] args) {
        Rational rational1 = new Rational(new BigInteger(14 + ""),
                new BigInteger(37 + ""));
        Rational rational2 = new Rational(new BigInteger(23 + ""),
                new BigInteger(67 + ""));
        System.out.println("14/37 + 23/67 = "+rational1.add(rational2));
        System.out.println("14/37 - 23/67 = "+rational1.subtract(rational2));
        System.out.println("14/37 * 23/67 = "+rational1.multiple(rational2));
        System.out.println("14/37 / 23/67 = "+rational1.divide(rational2));
    }
}




class Rational extends Number implements Comparable {
    private BigInteger numerator;// 分子
    private BigInteger denominator;// 分母

    public Rational() {
        this(BigInteger.ZERO, BigInteger.ONE);
    }

    public Rational(BigInteger numerator, BigInteger denominator) {
        BigInteger gcd = gcd(numerator, denominator);
        this.numerator = ((denominator.compareTo(BigInteger.ZERO)) > 0 ? BigInteger.ONE
                : new BigInteger(-1 + "")).multiply(numerator).divide(gcd);
        this.denominator = denominator.abs().divide(gcd);
    }

    public static BigInteger gcd(BigInteger a, BigInteger b) {
        BigInteger n1 = a.abs();
        BigInteger n2 = b.abs();
        BigInteger remainder = n1.remainder(n2);
        while (remainder.compareTo(BigInteger.ZERO) > 0) {
            n1 = n2;
            n2 = remainder;
            remainder = n1.remainder(n2);
        }
        return n2;
    }

    public BigInteger getNumerator() {
        return numerator;
    }

    public BigInteger getDenominator() {
        return denominator;
    }

    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);
    }

    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);
    }

    public Rational multiple(Rational secondRational) {
        BigInteger n = numerator.multiply(secondRational.getNumerator());
        BigInteger d = denominator.multiply(secondRational.getDenominator());
        return new Rational(n, d);
    }

    public Rational divide(Rational secondRational) {
        BigInteger n = numerator.multiply(secondRational.getDenominator());
        BigInteger d = denominator.multiply(secondRational.getNumerator());
        return new Rational(n, d);
    }

    @Override
    public boolean equals(Object obj) {
// TODO Auto-generated method stub
        if (this.getNumerator().compareTo(((Rational) obj).getNumerator()) == 0) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    public String toString() {
// TODO Auto-generated method stub
        if (denominator.compareTo(BigInteger.ONE) == 0) {
            return numerator.toString();
        } else {
            return numerator.toString() + "/" + denominator.toString();
        }
    }

    @Override
    public int intValue() {
// TODO Auto-generated method stub
        return numerator.divide(denominator).intValue();
    }

    @Override
    public long longValue() {
// TODO Auto-generated method stub
        return numerator.divide(denominator).longValue();
    }

    @Override
    public float floatValue() {
// TODO Auto-generated method stub
        return numerator.divide(denominator).floatValue();
    }

    @Override
    public double doubleValue() {
// TODO Auto-generated method stub
        return numerator.divide(denominator).doubleValue();
    }

    @Override
    public int compareTo(Object o) {
// TODO Auto-generated method stub
        if (this.getNumerator().compareTo(((Rational) o).getNumerator()) > 0) {
            return 1;
        } else if (this.getNumerator().compareTo(((Rational) o).getNumerator()) < 0) {
            return -1;
        } else {
            return 0;
        }
    }
}

package ch11;

import java.util.ArrayList;

public class c {
    public static int calculate(int upLimit) {

        int s[] = new int[upLimit+1];
        int s1[] = new int[upLimit+1];
        for (int i = 3; i <= upLimit; i++) {
            ArrayList a = calculateCollatzLen(i);
            int len = a.size();
            s[i] = len;
            //System.out.println(i+" "+a);
            s1[i] = len;
            a.clear();
        }
        //s1=s.clone();

        java.util.Arrays.sort(s);

//        for (int i = 3; i <= upLimit; i++) {
//            for (int j = i + 1; j <= upLimit; j++) {
//                if (s[i] < s[j]) {
//                    int temp = s[i];
//                    s[i] = s[j];
//                    s[j] = temp; // 两个数交换位置
//                }
//            }
//        }


        int max[]=new int[5];
        for(int i=3;i<=upLimit;i++){
            if(s1[i]==s[upLimit])
                max[0]=i;
            if(s1[i]==s[upLimit-1])
                max[1]=i;
            if(s1[i]==s[upLimit-2])
                max[2]=i;
            if(s1[i]==s[upLimit-3])
                max[3]=i;
            else if(s1[i]==s[upLimit-4])
                max[4]=i;

        }
        System.out.println(max[0]);
        for(int i=0;i<5;i++){
            System.out.println("max"+i+"d="+max[i]);
            ArrayList list = calculateCollatzLen(max[i]);
            System.out.println(list);
            list.clear();
        }
//        System.out.println();

        return 0;
    }
    //return 链表
    public static ArrayList calculateCollatzLen(int i) {
        long n = i;
        int count = 1;
        ArrayList a = new ArrayList();
        while (n != 1) {

            if (n % 2 == 0) {
                n = n / 2;
            } else {
                n = n * 3 + 1;
            }
            a.add(n);
            count++;
        }
        return a;
    }

    public static void main(String[] args) {
        c.calculate(1000000);
    }
}

 

标签:BigInteger,return,第十一,课堂作业,imaginaryPart,Complex,Rational,java,public
来源: https://blog.csdn.net/zhang24360/article/details/117651415

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有