0

我知道我可以使用它来生成它,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());
    }
}

我曾尝试使用floatdouble最后int使用BigDecimal了,但我仍然得到 1,结果我不知道为什么。

PS它实际上在给出大数字时抛出InputMismatchException,即大于20000000002 Billion

4

1 回答 1

1

n被定义为一个int并且1是一个int文字。当您将两个ints 相除时,您使用整数算术,这将只返回分数的整个部分 - 在您的情况下,0. 要纠正这个问题,您应该使用doubles:

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());
    }
}
于 2014-08-16T17:17:43.260 回答