[英]Find the sum of the digits of a number in Java
我是Java的新手,並且為歐拉問題提供了解決方案
public class Problem16{
public static void main(String[] args){
System.out.println(DecomposeNumber(PowerDigitSum(1000)));
}// end main
public static double PowerDigitSum(double iExposant){
return Math.pow(2, iExposant);
}// end PowerDigitSum()
public static int DecomposeNumber(double iNb){
int[] intTab = String.valueOf(iNb).chars().map(Character::getNumericValue).toArray();
int iMax = intTab.length;
int sum = 0;
for(int i = 0; i < iMax; i++){
sum += intTab[i];
}
return sum + 1;
}// end DecomposeNumber()
}// end classe
我不明白我的解決方案適用於較小的數字,例如n ^ 15但不適用於n ^ 1000,我知道它不起作用,因為數字不是完整的數字,但是有一種方法可以假設將1.071509e + 301轉換為完整數字?
如果我的問題正確,那么您希望打印出沒有科學符號的大字體。 您可以使用String.format()
做到這一點。
String stringNumber = String.format("%f", iNb);
雖然其他答案肯定可以解決您的部分問題。 我不建議將double
類型用於2 ^ 1000
這樣的計算。
您問題的答案是利用BigInteger
。 提示一下,我將為PowerDigitSum
方法提供邏輯,在您嘗試從中學習時,將其余邏輯PowerDigitSum
練習。
函數PowerDigitSum
現在變為:
public static BigInteger powerDigitSum(int exponent){
return BigInteger.TWO.pow(exponent); // 2 ^ exponent
}
請注意,如果您打算繼續使用這種方法(希望這樣做),那么在DecomposeNumber
方法內部的流管道中調用map
后,您可以簡單地調用.sum()
並返回結果,而不是toArray()
,這意味着您無需執行后續循環即可對數字求和。
這是使用BigInteger的實現,沒有任何字符串轉換。 事實證明,大double值的取模並不比字符串方法好。
請注意,這實際上是字符串轉換的基礎,沒有這種情況下不需要的開銷。
int sumDigits(BigInteger number) {
int sum = 0;
while (number.compareTo(BigInteger.ZERO) > 0) {
sum += number.mod(BigInteger.TEN).intValue();
number = number.divide(BigInteger.TEN);
}
return sum;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.