开发者社区> 问答> 正文

ForLoop中的BigInteger和Java中的列表

我试图创建并返回一个BigInteger列表,该列表计算给定的整数n,作为斐波纳契数的总和以降序排列。例如,如果给定整数n = 8000,则结果将返回[6765, 987, 233, 13, 2]。

我编写了一个代码,将所述斐波纳契数计算为列表,而所述数字小于n,但是我不太了解如何实现其余部分。

问题来源:Stack Overflow

展开
收起
montos 2020-03-28 09:12:06 356 0
1 条回答
写回答
取消 提交回答
  • 如果您进行打印,fibs您将意识到循环将两个相加,因此您应该删除该 {fibs.add(BigInteger.ONE); fibs.add(BigInteger.ONE);}行。

    现在,您已经有了所有的斐波那契数,您就从列表的末尾开始,n只要数值不为负就从中减去数。

    向后迭代列表的最简单方法是反转列表并正常进行迭代。

    Collections.reverse(fibs);
    for (BigInteger fib : fibs) {
        ...
    }```
    您还可以使用a ListIterator向后进行迭代,而无需反转列表。
    

    for (ListIterator iter = fibs.listIterator(fibs.size()); iter.hasPrevious(); ) { BigInteger fib = iter.previous(); ... }``` 要找到您可以从中减去的数字n,只需保持仍需要减少的值(即b 剩余的原始值)的运行值即可。

    BigInteger remain = n;
    for (BigInteger fib : fibs) {
        if (fib.compareTo(remain) <= 0) {  // if (fib <= remain)
            remain = remain.subtract(fib); //   remain -= fib;
        }
    }```
    将减去的值添加到结果列表中,即可完成操作。
    
    
    回答来源:Stack Overflow
    2020-03-28 09:12:40
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载