Java 查找一个数字是否为斐波那契数?在爪哇
问题定义 给定一个数,告诉它是否为斐波那契数 输入Java 查找一个数字是否为斐波那契数?在爪哇,java,fibonacci,Java,Fibonacci,问题定义 给定一个数,告诉它是否为斐波那契数 输入 测试案例数量1Try@rossum解决方案: int one = (int) Math.sqrt((5*n*n)+4); int two = (int) Math.sqrt((5*n*n)-4); 永远不要测试双值是否相等,它(几乎)每次都失败。如果您声明: double one = 1.0; double two = 1.0; one可能是1.0000000001,two可能是1.00000000000000001。您可以看到这些值(完
int one = (int) Math.sqrt((5*n*n)+4);
int two = (int) Math.sqrt((5*n*n)-4);
永远不要测试双值是否相等,它(几乎)每次都失败。如果您声明:
double one = 1.0;
double two = 1.0;
one
可能是1.0000000001,two
可能是1.00000000000000001。您可以看到这些值(完全)不同
在这种情况下,您应该这样比较:
if(Math.abs(one-two)<0.001){
//do something
}
if(Math.abs(一二)d%1==0
对于任何双精度d
,都不是一个完全可靠的测试,因为例如Math.sqrt
中的一些小错误可能会给您提供d=2.00000000 4
或一些东西,而不是2
。相反,您应该与公差进行比较,例如d%1<0.001
如果d
始终为正。导入java.io.BufferedReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BasicEmployeeService {
public static void main(String[] args) throws IOException {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
System.out.println("Enter the number");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int tc = Integer.parseInt(br.readLine());
for (int i = 0; i < tc; i++) {
int n = Integer.parseInt(br.readLine());
doThis(n);
}
}
public static void doThis(int n) {
long square = n * n;
double one = Math.sqrt((5 * square) + 4);
double two = Math.sqrt((5 * square) - 4);
if (one % 1 == 0 || two % 1 == 0) {
System.out.println("IsFibo");
} else {
System.out.println("IsNotFibo");
}
}
}
导入java.io.IOException;
导入java.io.InputStreamReader;
公共类基本员工服务{
公共静态void main(字符串[]args)引发IOException{
/*在此处输入代码。从标准输入读取输入。将输出打印到标准输出*/
System.out.println(“输入编号”);
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
int tc=Integer.parseInt(br.readLine());
对于(int i=0;i
实际答案是将int类型更改为double,同时将值读取为
Double tc = Double.parseDouble(br.readLine());
并将double传递给函数doThis
public static void doThis(Double n) {
现在它工作得非常好“因此,如果n是一个斐波那契数,那么5n^2+4或5n^2-4都是正方形。”代码看起来很奇怪,您使用的==0
可能与双精度重复。由于舍入错误,这不太可能给出您期望的答案。最好重新编写测试以避免=
。
public static void doThis(Double n) {