2017-05-24 26 views
-1
public class ProjectEulerProblem20_Factorial_Digit_Sum { 

public static void main(String[] args) { 
    BigInteger oneHundredFactorial = BigInteger.ONE; 
    for (int i = 100; i >= 1; i--) { 
     oneHundredFactorial = oneHundredFactorial.multiply(BigInteger.valueOf(i)); 
    }  

    String k = oneHundredFactorial.toString(); 
    char x; 
    int sum = 0; 

    for (int i = 0; i < k.length(); i++) { 
     x = k.charAt(i); 
     sum = sum + x; 
    } 

    System.out.println(sum); 
} 

} 

嘿,我沒有看到我在哪裏錯了。我的輸出應該是100中所有數字的總和!然而,我不知道爲什麼我的總和值是8232,當正確的答案是648時。代碼看起來對我來說很基本,它似乎是有道理的。如果任何人都可以幫助我與我似乎錯過了那將不勝感激。謝謝!歐拉項目20,有人可以告訴我爲什麼我的輸出不正確嗎?

編輯: 這是問題:

N!意味着n×(n-1)×...×3×2×1

例如,10! = 10×9×...×3×2×1 = 3628800, 以及數字10中的數字之和!是3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.

查找數字100的總和!

回答

1

當您要添加數字值時,您正在添加ascii字符值。

sum = sum + x; 

能否使用Character.digit(char, int)

sum = sum + Character.digit(x, 10); 

sum += Character.digit(x, 10); 

sum += x - '0'; 
+1

非常感謝!修復!感謝快速簡潔的回覆! – FermatsLastTheorem

1

你要添加字符代碼而不是數字;您可以使用Character.getNumericValue來解決手頭的問題。

你的循環改成這樣:

for (int i = 0; i < k.length(); i++) { 
    sum = sum + Character.getNumericValue(k.charAt(i)); 
} 
相關問題