Java语言程序设计与数据结构(基础篇)课后练习题 第十三章(三)

==================================================================

package dishisanzhang;

public class Complex implements Cloneable, Comparable< Complex > {

private double realPart;

private double imaginaryPart;

public Complex() {

}

public Complex(double a) {

this(a, 0);

}

public Complex(double a, double b) {

this.realPart = a;

this.imaginaryPart = b;

}

public double getRealPart() {

return realPart;

}

public double getImaginaryPart() {

return imaginaryPart;

}

public Complex add(Complex c) {

double r = realPart + c.getRealPart();

double i = imaginaryPart + c.getImaginaryPart();

return new Complex(r, i);

}

public Complex subtract(Complex c) {

double r = realPart - c.getRealPart();

double i = imaginaryPart - c.getImaginaryPart();

return new Complex(r, i);

}

public Complex multiply(Complex c) {

double r = realPart * c.getRealPart() - imaginaryPart * c.getImaginaryPart();

double i = realPart * c.getImaginaryPart() + imaginaryPart * c.getRealPart();

return new Complex(r, i);

}

public Complex divide(Complex c) {

double r = (realPart * c.getRealPart() + imaginaryPart * c.getImaginaryPart())

/ (c.getRealPart() * c.getRealPart() + c.getImaginaryPart() * c.getImaginaryPart());

double i = (realPart * c.getImaginaryPart() - imaginaryPart * c.getRealPart())

/ (c.getRealPart() * c.getRealPart() + c.getImaginaryPart() * c.getImaginaryPart());

return new Complex(r, i);

}

public double abs() {

return Math.sqrt(realPart * realPart + imaginaryPart * imaginaryPart);

}

@Override

public String toString() {

if (realPart == 0)

return imaginaryPart + “i”;

else if (imaginaryPart == 0)

return realPart + “”;

else

return realPart + " + " + imaginaryPart + “i”;

}

@Override

public Object clone() {

return new Complex(realPart, imaginaryPart);

}

@Override

public int compareTo(Complex c) {

if (this.abs() > c.abs())

return 1;

else if (this.abs() < c.abs())

return -1;

else

return 0;

}

}

package dishisanzhang;

import java.util.Scanner;

public class dishisanzhang {

public static void main(String[] args) throws CloneNotSupportedException {

Scanner input = new Scanner(System.in);

System.out.print("Enter the first complex number : ");

double r1 = input.nextDouble();

double i1 = input.nextDouble();

Complex complex1 = new Complex(r1, i1);

System.out.print("Enter the second complex number : ");

double r2 = input.nextDouble();

double i2 = input.nextDouble();

Complex complex2 = new Complex(r2, i2);

String c1 = “(” + r1 + " + " + i1 + “i)”;

String c2 = “(” + r2 + " + " + i2 + “i)”;

System.out.println( c1 + " + " + c2 + " = " + complex1.add(complex2));

System.out.println( c1 + " - " + c2 + " = " + complex1.subtract(complex2));

System.out.println( c1 + " * " + c2 + " = " + complex1.multiply(complex2));

System.out.println( c1 + " / " + c2 + " = " + complex1.divide(complex2));

System.out.println( “|” + c1 + " + " + c2 + "| = " + complex1.abs());

// 3.5 5.5

// -3.5 1

}

}

13.18

==================================================================

package dishisanzhang;

import java.math.BigInteger;

public class Rational implements Comparable< Rational > {

private BigInteger numerator = new BigInteger(“0”);

private BigInteger denominator = new BigInteger(“1”);

public Rational() {

this(new BigInteger(“0”), new BigInteger(“1”));

}

public Rational(BigInteger numerator, BigInteger denominator) {

BigInteger gcd = gcd(numerator, denominator);

if (denominator.compareTo(new BigInteger(“0”)) > 0) {

this.numerator = numerator.divide(gcd);

} else

this.numerator = numerator.multiply(new BigInteger(“-1”)).divide(gcd);

this.denominator = denominator.abs().divide(gcd);

}

private static BigInteger gcd(BigInteger n, BigInteger d) {

BigInteger n1 = n.abs();

BigInteger n2 = d.abs();

BigInteger gcd = new BigInteger(“1”);

BigInteger n3 = new BigInteger(“1”);

for (int i = 1; i <= n1.intValue() && i <= n2.intValue(); i++) {

if ((n1.remainder(n3).equals(new BigInteger(“0”))) && (n2.remainder(n3).equals(new BigInteger(“0”)))) {

gcd = n3;

}

n3 = n3.add(new BigInteger(“1”));

}

return gcd;

}

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 multiply(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 String toString() {

if (denominator.equals(new BigInteger(“1”)) || numerator.equals(new BigInteger(“0”))) {

return numerator.toString();

} else

return numerator.toString() + “/” + denominator.toString();

}

@Override

public boolean equals(Object other) {

if (this.subtract((Rational) other).getNumerator().equals(new BigInteger(“0”))) {

return true;

} else

return false;

}

public int intValue() {

return (int) doubleValue();

}

public float floatValue() {

return (float) doubleValue();

}

public double doubleValue() {

return numerator.divide(denominator).doubleValue();

}

public long longValue() {

return (long) doubleValue();

}

@Override

public int compareTo(Rational o) {

if (this.subtract(o).getNumerator().compareTo(new BigInteger(“0”)) > 0)

return 1;

else if (this.subtract(o).getNumerator().compareTo(new BigInteger(“0”)) < 0)

return -1;

else

return 0;

}

}

package dishisanzhang;

import java.math.BigInteger;

public class dishisanzhang {

public static void main(String[] args) throws CloneNotSupportedException {

Rational sum = new Rational();

Rational s = null;

for (int i = 1; i < 100; i++) {

s = new Rational(new BigInteger(new Integer(i)+“”),

new BigInteger(new Integer(i + 1)+“”));

sum = sum.add(s);

System.out.println(100 - i);

}

//慢慢等吧,等到输出0,你就看到结果了哈哈!!!

System.out.println(sum);

}

}

13.19

==================================================================

方向好像写错了,结果对!,想改改的自己改改就行。

package dishisanzhang;

import java.math.BigInteger;

public class Rational extends Number implements Comparable< Rational > {

private BigInteger numerator = new BigInteger(“0”);

private BigInteger denominator = new BigInteger(“1”);

public Rational() {

this(new BigInteger(“0”), new BigInteger(“1”));

}

public Rational(BigInteger numerator, BigInteger denominator) {

BigInteger gcd = gcd(numerator, denominator);

if (denominator.compareTo(new BigInteger(“0”)) > 0) {

this.numerator = numerator.divide(gcd);

} else

this.numerator = numerator.multiply(new BigInteger(“-1”)).divide(gcd);

this.denominator = denominator.abs().divide(gcd);

}

private static BigInteger gcd(BigInteger n, BigInteger d) {

BigInteger n1 = n.abs();

BigInteger n2 = d.abs();

BigInteger gcd = new BigInteger(“1”);

BigInteger n3 = new BigInteger(“1”);

for (int i = 1; i <= n1.intValue() && i <= n2.intValue(); i++) {

if ((n1.remainder(n3).equals(new BigInteger(“0”))) && (n2.remainder(n3).equals(new BigInteger(“0”)))) {

gcd = n3;

}

n3 = n3.add(new BigInteger(“1”));

}

return gcd;

}

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 multiply(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 String toString() {

if (denominator.equals(new BigInteger(“1”)) || numerator.equals(new BigInteger(“0”))) {

return numerator.toString();

} else

return numerator.toString() + “/” + denominator.toString();

}

@Override

public boolean equals(Object other) {

if (this.subtract((Rational) other).getNumerator().equals(new BigInteger(“0”))) {

return true;

} else

return false;

}

@Override

public int intValue() {

return (int) doubleValue();

}

@Override

public float floatValue() {

return (float) doubleValue();

}

@Override

public double doubleValue() {

return numerator.divide(denominator).doubleValue();

}

@Override

public long longValue() {

return (long) doubleValue();

}

@Override

public int compareTo(Rational o) {

if (this.subtract(o).getNumerator().compareTo(new BigInteger(“0”)) > 0)

return 1;

else if (this.subtract(o).getNumerator().compareTo(new BigInteger(“0”)) < 0)

return -1;

else

return 0;

}

}

package dishisanzhang;

import java.math.BigInteger;

import java.util.Scanner;

public class dishisanzhang {

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner input = new Scanner(System.in);

System.out.print("Enter a decimal number: ");

String str = input.next();

boolean bl = true;

if (str.charAt(0) == ‘-’)

bl = false;

String[] s = new String[2];

s = str.split(“\.”);

int a = Integer.parseInt(s[0]);

int b = Integer.parseInt(s[1]);

int length = s[1].length();

int numerator1 = (int) (a * Math.pow(10, length) + b);

int denominator1 = (int) Math.pow(10, length);

int greatestCommonDivisor = maxCommonDivisor(numerator1, denominator1);

int numrator2 = numerator1 / greatestCommonDivisor;

int denominator2 = denominator1 / greatestCommonDivisor;

Rational r1 = new Rational(new BigInteger(numrator2 + “”), new BigInteger(denominator2 + “”));

if (bl)

System.out.println("The fraction number is " + r1);

else

System.out.println(“The fraction number is -” + r1);

}

public static int maxCommonDivisor(int m, int n) {

if (m < n) {

int temp = m;

m = n;

n = temp;

}

while (m % n != 0) {

int temp = m % n;

m = n;

n = temp;

}

return n;

}

}

13.20

==================================================================

package dishisanzhang;

public class Complex implements Cloneable, Comparable< Complex > {

private double realPart;

private double imaginaryPart;

public Complex() {

}

public Complex(double a) {

this(a, 0);

}

public Complex(double a, double b) {

this.realPart = a;

this.imaginaryPart = b;

}

public double getRealPart() {

return realPart;

}

public double getImaginaryPart() {

return imaginaryPart;

}

public Complex add(Complex c) {

double r = realPart + c.getRealPart();

double i = imaginaryPart + c.getImaginaryPart();

return new Complex(r, i);

}

public Complex subtract(Complex c) {

double r = realPart - c.getRealPart();

double i = imaginaryPart - c.getImaginaryPart();

return new Complex(r, i);

}

public Complex multiply(Complex c) {

double r = realPart * c.getRealPart() - imaginaryPart * c.getImaginaryPart();

double i = realPart * c.getImaginaryPart() + imaginaryPart * c.getRealPart();

return new Complex(r, i);

}

public Complex divide(Complex c) {

double r = (realPart * c.getRealPart() + imaginaryPart * c.getImaginaryPart())

/ (c.getRealPart() * c.getRealPart() + c.getImaginaryPart() * c.getImaginaryPart());

double i = (realPart * c.getImaginaryPart() - imaginaryPart * c.getRealPart())

/ (c.getRealPart() * c.getRealPart() + c.getImaginaryPart() * c.getImaginaryPart());

return new Complex(r, i);

}

public double abs() {

return Math.sqrt(realPart * realPart + imaginaryPart * imaginaryPart);

}

@Override

public String toString() {

if (realPart == 0)

return imaginaryPart + “i”;

else if (imaginaryPart == 0)

return realPart + “”;

else

return realPart + " + " + imaginaryPart + “i”;

}

@Override

public Object clone() {

return new Complex(realPart, imaginaryPart);

}

@Override

public int compareTo(Complex c) {

if (this.abs() > c.abs())

return 1;

else if (this.abs() < c.abs())

return -1;

else

return 0;

}

}

package dishisanzhang;

import java.util.Scanner;

public class dishisanzhang {

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner input = new Scanner(System.in);

System.out.print(“Enter a, b, c:”);

double a = input.nextDouble();

double b = input.nextDouble();

double c = input.nextDouble();

double delta = b * b - 4 * a * c;

if (delta < 0) {

double real1 = -1 * b / 2 / a;

double imaginary1 = Math.pow(-delta, 0.5) / 2 / a;

Complex complex1 = new Complex(real1, imaginary1);

double real2 = -1 * b / 2 / a;

double imaginary2 = -Math.pow(-delta, 0.5) / 2 / a;

Complex complex2 = new Complex(real2, imaginary2);

System.out.println("The roots are " + complex1 + " and " + complex2);

} else if (delta == 0)

System.out.println("The root is " + (-1 * b / 2 / a));

else {

double r1 = (-1 * b + Math.pow(delta, 0.5)) / 2 / a;

double r2 = (-1 * b - Math.pow(delta, 0.5)) / 2 / a;

System.out.println("The roots are " + r1 + " and " + r2);

}

}

}

13.21

==================================================================

package dishisanzhang;

import java.math.BigInteger;

public class Rational extends Number implements Comparable< Rational >{

private BigInteger numerator = new BigInteger(“0”);

private BigInteger denominator = new BigInteger(“1”);

public Rational() {

this(new BigInteger(“0”), new BigInteger(“1”));

}

public Rational(BigInteger numerator, BigInteger denominator) {

BigInteger gcd = gcd(numerator, denominator);

if (denominator.compareTo(new BigInteger(“0”)) > 0) {

this.numerator = numerator.divide(gcd);

} else

this.numerator = numerator.multiply(new BigInteger(“-1”)).divide(gcd);

this.denominator = denominator.abs().divide(gcd);

}

private static BigInteger gcd(BigInteger n, BigInteger d) {

BigInteger n1 = n.abs();

BigInteger n2 = d.abs();

BigInteger gcd = new BigInteger(“1”);

BigInteger n3 = new BigInteger(“1”);

for (int i = 1; i <= n1.intValue() && i <= n2.intValue(); i++) {

if ((n1.remainder(n3).equals(new BigInteger(“0”))) && (n2.remainder(n3).equals(new BigInteger(“0”)))) {

gcd = n3;

}

n3 = n3.add(new BigInteger(“1”));

}

return gcd;

}

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 multiply(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 String toString() {

if (denominator.equals(new BigInteger(“1”)) || numerator.equals(new BigInteger(“0”))) {

return numerator.toString();

} else

return numerator.toString() + “/” + denominator.toString();

}

@Override

public boolean equals(Object other) {

if (this.subtract((Rational) other).getNumerator().equals(new BigInteger(“0”))) {

return true;

} else

return false;

}

@Override

public int intValue() {

return (int) doubleValue();

}

@Override

public float floatValue() {

return (float) doubleValue();

}

@Override

public double doubleValue() {

return numerator.divide(denominator).doubleValue();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值