0

我有这个代码,我设法数了数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

4 回答 4

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)));
    }
}
于 2013-02-18T12:01:47.413 回答
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));

}

对于阶乘

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 是不可变的,因此您需要重新分配值。

于 2013-02-18T12:02:13.623 回答
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。

于 2013-02-18T11:57:37.200 回答
-1

您可能应该使用LongBigInteger为您的阶乘计算,因为您可能会在使用双精度的计算中失去精度。您也不需要任何小数值,这是浮点数的主要用例。一旦你有一个整数表示你的数字,它会让你更容易对数字求和。

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;
}
于 2013-02-18T11:57:44.847 回答