java如何计算double变量中所有数字的总和

时间:2013-02-18 11:51:09

标签: java

我有这段代码,我设法计算77!号码。但是我有点困惑如何计算双变量中所有数字的总和?

77!= 1.4518309202828584E113。我不能在这里使用整数数据类型。我该怎么办?

package org.kodejava.example.io;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;

public class Many {
    public static void main(String[] args) {
        System.out.println(factorial(77))
    }

    public static double factorial(double n) {
        if (n == 0) return 1;
        return n * factorial(n-1);
    }
}

4 个答案:

答案 0 :(得分:1)

如何使用BigInteger如下,

public static BigInteger factorial(BigInteger n) {
    {
        if (n.compareTo(BigInteger.ZERO) > 0)
            return BigInteger.ONE;
        return n.multiply(factorial(n.subtract(BigInteger.ONE)));
    }
}

答案 1 :(得分:1)

BigInteger是救援 您可以使用BigInteger来处理此类情况

BigInteger bigInteger1 = new BigInteger ("123456789");
BigInteger bigInteger2 = new BigInteger ("112334");
BigInteger bigIntResult = bigInteger1.multiply(bigInteger2); 
System.out.println("Result is  ==> " + bigIntResult);

输出:

Result is ==> 13868394935526

以上示例将为您提供如何乘以两个数字的想法。您可以使用自己的逻辑来使代码正常工作:)

添加

BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 500; i++) {

        sum = sum.add(BigInteger.valueOf(i));

}

For Factorial

public static BigInteger factorial(BigInteger n) {
    BigInteger result = BigInteger.ONE;

    while (!n.equals(BigInteger.ZERO)) {
        result = result.multiply(n);
        n = n.subtract(BigInteger.ONE);
    }

    return result;
}

注意 BigInteger是不可变的,因此您需要重新分配该值。

答案 2 :(得分:0)

您可以将Double转换为String,然后将每个char转换为int并对这些值求和。像这样:

double x = 102.4000909;
String number = String.valueOf(x);
int sum = 0;
for(char c : number.toCharArray())
   sum += Integer.parseInt(String.valueOf(c));

System.out.println(sum);

我猜想DecimalSeperator char需要一些ErrorHandling。

答案 3 :(得分:-1)

您可能应该使用LongBigInteger进行因子计算,因为您可能会在使用double的计算中失去精度。您也不需要任何小数值,这是浮点数的主要用例。一旦你有了数字的整数表示,你就可以更容易地对数字求和。

String num = String.valueOf(bigInt);
int sum = 0;
for ( Character i : num.toCharArray() ) {
    sum += Integer.parseInt(String.valueOf(i));
}

执行此操作的另一种方法是 -

long n = factorial(6);
int sum = 0;
while (n > 0) {
    int p = n % 10;
    sum += p;
    n = n / 10;
}