【问题标题】:Recursively add digits in Java BigInteger在 Java BigInteger 中递归添加数字
【发布时间】:2014-08-21 17:58:30
【问题描述】:

以下是我目前所拥有的,但编译器状态方法需要返回 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。

有什么建议吗?

【问题讨论】:

    标签: java recursion biginteger


    【解决方案1】:

    您的函数没有返回语句是else 子句。你也应该在那里返回result

    或者更好的是,重新排列您的代码以具有单个返回语句:

    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;
    }
    

    【讨论】:

      【解决方案2】:

      您忘记了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
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-27
        • 2017-05-08
        • 1970-01-01
        • 1970-01-01
        • 2014-12-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多