簡體   English   中英

在Java BigInteger中遞歸添加數字

[英]Recursively add digits in Java BigInteger

以下是我到目前為止所擁有的,但是編譯器聲明方法需要返回BigInteger。

private static BigInteger recSum(BigInteger val, BigInteger moddiv, BigInteger result){
    if(moddiv.compareTo(val) == 1){
        return result;
    }else{
        val = val.mod(moddiv);
        moddiv = moddiv.multiply(BigInteger.valueOf(10));
        result = result.add(recSum(val, moddiv, result));
    }
}

我基本上是想通過val將參數傳遞給此方法,並找到該數字的所有數字的總和。 只是為了練習,似乎遞歸可以在這里工作,而不是說將其轉換為字符串並將每個字符解析為一個值並添加。

基本上如果從1524開始,則1 + 5 + 2 + 4

寫出來,我發現它看起來像這樣:

(1524%10)+([1524-(1524%10)]%100)+([1524 - ([1524-(1524%10)]%100)]%1000)...

像這樣寫出來,我會看到我當前的代碼會停下來,但是無論如何都缺少一些東西。

哦,我想我的代碼是否可以正常工作

1000 + 500 + 20 + 4

在將其遞增到下一個冪之前,我可以輕松地重新排列並划分moddiv。 問題是在某個時候它沒有返回BigInteger。

有什么建議嗎?

您的函數沒有return語句的else子句。 您也應該在那里返回result

或者更好的是,重新排列代碼以包含單個return語句:

private static BigInteger recSum (BigInteger val, BigInteger moddiv, BigInteger result)
{
    if (moddiv.compareTo(val) != 1){
        val = val.mod(moddiv);
        moddiv = moddiv.multiply(BigInteger.valueOf(10));
        result = result.add(recSum(val, moddiv, result));
    }

    return result;
}

您忘記了return聲明:

private static BigInteger recSum(BigInteger val, BigInteger moddiv, BigInteger result){
    if(moddiv.compareTo(val) == 1){
        return result;
    }else{
        val = val.mod(moddiv);
        moddiv = moddiv.multiply(BigInteger.valueOf(10));
        result = result.add(recSum(val, moddiv, result));
        return result; // <-- need return statement here
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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