2013-02-18 90 views
0

我已经得到了这段代码,我设法计算出了77!这个数字。然而,我有点困惑如何计算双变量中所有数字的总和?java如何计算双变量中所有数字的总和

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); 
    } 
} 
+8

短语“双变量中所有数字的总和”是没有意义的。 – 2013-02-18 11:52:38

+2

为什么不是BIgInteger? – 2013-02-18 11:54:21

+0

77!大约等于1.4518309202828584E113。总结1.4518309202828584E113中的所有数字不会给你77位数字的总和! – user570500 2013-02-18 11:57:50

回答

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是不可改变的,所以你需要重新 - 分配值。

+0

我想知道你在哪找到isPrim(i)方法,在我的eclipse juno中它不起作用 – Leo 2013-02-18 13:23:23

+0

朋友.. isPrim()不是内置功能。这只是一个例子..好吧,让我改变这个..然后再试一次 – asifsid88 2013-02-18 14:33:29

+0

接受,很长时间soorry) – Leo 2013-04-02 12:13:33

0

您可以将Double转换为一个字符串,然后将每个字符转换为一个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字符,我需要一些ErrorHandling。

+0

不要使用'new Double',总是使用'Double.valueOf'! – 2013-02-18 11:58:42

+0

谢谢,我编辑了我的答案。 – HectorLector 2013-02-18 12:03:04

+0

@HectorLectorit不起作用,线程“main”java.lang中的异常。错误:未解决的编译问题: \t Integer类型中的方法parseInt(String)不适用于参数(char) – Leo 2013-02-18 12:29:54

-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; 
} 
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))); 
    } 
}