我有这段代码,我设法计算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);
}
}
答案 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)
您可能应该使用Long
或BigInteger
进行因子计算,因为您可能会在使用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;
}