【发布时间】:2013-03-02 16:42:36
【问题描述】:
我正在编写一个程序来计算数字 103993/33102 的小数扩展,并且我想根据用户输入的数字打印出所有尾随小数。它对直到10^5 的所有号码都运行得很快,但是如果输入10^6 来编程大约需要5 分钟才能打印出答案。我怎样才能加快速度?我尝试了两种不同的方法,一种使用BigDecimal,另一种使用字符串,但都没有有效地工作。
public static void main(String[] args) throws NumberFormatException,
IOException {
// BigDecimal num1 = new BigDecimal(103993);
// BigDecimal num2 = new BigDecimal(33102);
String repNum = "415926530119026040722614947737296840070086399613316";
// pw.println(num.toString());
String sNum = "3.1";
// pw.println(repNum.length());
int cases = Integer.parseInt(br.readLine());
int dec;
for (int i = 0; i < cases; i++) {
sNum = "3.1";
dec = Integer.parseInt(br.readLine());
if (dec == 0)
pw.println("3");
else if (dec <= 52) {
sNum += repNum.substring(0, dec - 1);
pw.println(sNum);
} else {
while (dec > 52) {
sNum += repNum;
dec -= 51;
}
sNum += repNum.substring(0, dec - 1);
pw.println(sNum);
}
// pw.println(num1.divide(num2, dec,
// RoundingMode.FLOOR).toString());
}
}
【问题讨论】:
-
dec和cases是什么? -
dec 是您要扩展的小数位数,如果您想以多种方式打印数字的小数扩展,例如,如果我输入 2 4 6 它会打印出数字扩展到小数点后 4 位,然后它会再次打印出来 扩展到第 6 位
标签: java performance algorithm math bigdecimal