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