簡體   English   中英

在Java中找到數字的總和

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM