62,623
社区成员
发帖
与我相关
我的任务
分享/**
* 返回 BigDecimal 值
* @param scale 有效精度
* @return
*/
public BigDecimal bigDecimalValue(int scale) {
BigDecimal num = new BigDecimal(numerator.toString());
BigDecimal deno = new BigDecimal(denominator.toString());
BigDecimal result = num.divide(deno, scale, BigDecimal.ROUND_HALF_UP);
return result;
}public class FractionTest {
public static void main(String[] args) {
int numerator = -1;
MyFraction fra = new MyFraction(0, 1);
double d = 0;
for (int i = 1; i <= 10000; i++) {
numerator = -numerator;
fra = fra.add(new MyFraction(numerator, 2 * i - 1));
d += ((double) (numerator)) / (2 * i - 1);
}
// 把约分放到最后做,可以大大地提高运行速度
fra.reduce();
System.out.println(fra.getNumerator().toString().length());
System.out.println(fra.getDenominator().toString().length());
System.out.println(d);
}
}public class FractionTest {
public static void main(String[] args) {
int numerator = -1;
MyFraction fra = new MyFraction(0, 1);
double d = 0;
for (int i = 1; i <= 10000; i++) {
numerator = -numerator;
fra = fra.add(new MyFraction(numerator, 2 * i - 1));
d += ((double) (numerator)) / (2 * i - 1);
fra.reduce(); // 约分
if (i % 1000 == 0) {
System.out.println(i);
}
}
System.out.println(fra.getNumerator().toString().length());
System.out.println(fra.getDenominator().toString().length());
System.out.println(d);
}
}
class MyFraction {
private BigInteger numerator;
private BigInteger denominator;
public MyFraction(int numerator, int denominator) {
this.numerator = new BigInteger(numerator + "");
this.denominator = new BigInteger(denominator + "");
}
public MyFraction(BigInteger numerator, BigInteger denominator) {
this.numerator = numerator;
this.denominator = denominator;
}
public MyFraction add(MyFraction fra) {
BigInteger num1 = this.numerator.multiply(fra.denominator);
BigInteger num2 = fra.numerator.multiply(this.denominator);
BigInteger num = num1.add(num2);
BigInteger den = this.denominator.multiply(fra.denominator);
return new MyFraction(num, den);
}
public void reduce() {
BigInteger gcd = numerator.abs().gcd(denominator);
numerator = numerator.divide(gcd);
denominator = denominator.divide(gcd);
}
public MyFraction getReducedFraction() {
BigInteger gcd = numerator.abs().gcd(denominator);
return new MyFraction(numerator.divide(gcd), denominator.divide(gcd));
}
public double doubleValue() {
return numerator.doubleValue() / denominator.doubleValue();
}
public BigInteger getDenominator() {
return denominator;
}
public BigInteger getNumerator() {
return numerator;
}
}