这是我的代码:
使用递归
找不到更多的数字是不行的import java.util.*;
import java.lang.*;
class Main
{
static String fib(int f)
{
if(f!=1)
return ""+(f*(Integer.parseInt(fib(f-1))));
else
return "1";
}
public static void main(String[] args) throws java.lang.Exception
{
Scanner sc= new Scanner(System.in);
int f= sc.nextInt();
int a[]=new int[f];
int i;
for( i=0;i<f;i++)
a[i]=sc.nextInt();
for( i=0;i<f;i++)
System.out.println(fib(a[i]));
}
}
答案 0 :(得分:0)
这是类型整数范围的问题(2147483647)。如果你只是用long替换int(范围9223372036854775807)
import java.util.*;
class Main
{
static String fib(long f)
{
if(f!=1)
return ""+(f*(Long.parseLong(fib(f-1))));
else
return "1";
}
public static void main(String[] args) throws java.lang.Exception
{
Scanner sc = new Scanner(System.in);
int f = sc.nextInt();
long a[] = new long[f];
int i;
for(i = 0; i<f; i++)
a[i] = sc.nextLong();
for(i = 0; i<f; i++)
System.out.println(fib(a[i]));
}
}
然后程序已经可以计算21下的所有内容!但是如果你使用double,那么它应该使用更高的数字,因为double的范围是1.7976931348623157E308。加倍,最大工作因子计算为170!
PS:我是德国人,所以如果我写错了英语,我很抱歉答案 1 :(得分:-2)
代码逻辑没有错误。由于您使用int
,其范围比25
以外的数字因子短,因此输出错误。相反,请使用long
或更优选BigInteger
。
注意:您必须 导入 包含java.math
类的BigInteger
包才能使用此类型。
static BigInteger fib(BigInteger f) {
if (!f.equals(BigInteger.ONE))
return f.multiply(fib(f.subtract(BigInteger.ONE)));
else
return BigInteger.ONE;
}
public static void main(String[] args) throws java.lang.Exception {
Scanner sc = new Scanner(System.in);
int f = sc.nextInt();
int a[] = new int[f];
int i;
for (i = 0; i < f; i++)
a[i] = sc.nextInt();
for (i = 0; i < f; i++)
System.out.println(fib(new BigInteger(String.valueOf(a[i]))));
}
}