2013-02-18 104 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))); 
    } 
}