我有两种算法用于打印1000个数字的第一个斐波那契数字,但似乎我错过了一些东西。
<li>
Algo 1
public class ab{
public static void main(String[] args){
float phi = (float) 1.618033989;
float curr = 1;
float noOfDigits = 0;
float ans;
float fiveSqrt = (float) Math.sqrt(5);
while(noOfDigits< 1001){
noOfDigits = (curr*Math.log10(phi)) - Math.log10(fiveSqrt);
System.out.println("curr : " + curr + "Digits : " + Math.round(noOfDigits));
curr++;
}
}
}
它的输出很长,但最后它的内容是:
Output
看来,4785就是答案,但是快攻!这是不正确的。所以我尝试了一种更为数学的方法,反过来解决了Wolfram方程。
curr : 4781.0Digits : 999
curr : 4782.0Digits : 999
curr : 4783.0Digits : 999
curr : 4784.0Digits : 999
curr : 4785.0Digits : 1000
curr : 4786.0Digits : 1000
curr : 4787.0Digits : 1000
curr : 4788.0Digits : 1000
curr : 4789.0Digits : 1000
curr : 4790.0Digits : 1001
输出:ans = (1000 + (float) Math.log10(fiveSqrt))/ (float) Math.log10(phi);
System.out.println(ans);
再说一遍。我错过了什么吗?
答案 0 :(得分:3)
阅读this教程以获得完整的理解。你误解了算法,你使用的Math.round(noOfDigits)
不正确,你应该做的是:
为其添加“1”。
long roundedNumber;
while(noOfDigits< 1001){
noOfDigits = (curr*Math.log10(phi)) - Math.log10(fiveSqrt);
roundedNumber = (long)noOfDigits + 1;
System.out.println("curr : " + curr + "Digits : " + Math.round(roundedNumber));
curr++;
}
这给了我答案:4782.0
哪个是正确的。