我试图创建并返回一个BigInteger列表,该列表计算给定的整数n,作为斐波纳契数的总和以降序排列。例如,如果给定整数n = 8000,则结果将返回[6765, 987, 233, 13, 2]。
我编写了一个代码,将所述斐波纳契数计算为列表,而所述数字小于n,但是我不太了解如何实现其余部分。
问题来源:Stack Overflow
如果您进行打印,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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。