自定义生成2的自然对数

时间:2014-08-16 17:13:07

标签: java math natural-logarithm

我知道我可以使用Math.log(2)生成它但是当我尝试编写自己的程序以生成2的自然日志时,它会连续打印1.这是我的代码:

import java.math.BigDecimal;
import java.util.Scanner;


public class Ques11 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        BigDecimal sum = new BigDecimal(1);
        for(int i = 2; i <= n; i++) {
            sum.add(new BigDecimal(1/n));
        }
        System.out.print(sum.setScale(10).toPlainString());
    }
}

我尝试使用floatdoubleint,最后使用BigDecimal,但我仍然得到1,因此我不知道这是为什么。

P.S当给出大数字时,实际上会抛出InputMismatchException,即大于20000000002 Billion

1 个答案:

答案 0 :(得分:1)

n定义为int1int字面值。当你划分两个int时,你使用整数运算,这将只返回分数的整个部分 - 在你的情况下,0。 要解决此问题,您应该使用double s:

public class Ques11 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        double d = scan.nextInt(); // Note we're assigning to a double
        BigDecimal sum = new BigDecimal(1);
        for(int i = 2; i <= d; i++) {
            sum.add(new BigDecimal(1.0/d));
        }
        System.out.print(sum.setScale(10).toPlainString());
    }
}