编译器错误:从long到int___Fibonacci的转换可能有损



这是我在这里的第一篇文章,所以如果我犯了一些错误,我很抱歉。此外,编码不一定是我的事情,我正在努力掌握它的窍门并尽我所能。所以基本上,我必须使用动态编程来解决这个问题:

Triponacci是一个级数,其中第n个值等于前面3个值的总和。我们系列的最初3个值(基值(是{0,1,2}。请注意,我们系列中的第一个值是第0个值。输出将以语句的形式出现:Triponacci(2(=2括号中的值是输入值n。等号右边的数字是序列第n个元素的值。特里波那契(0(=0特里波那奇(3(=3

我想,简单的斐波那契加一个额外的步骤,对吧?好这就是我所做的:

static long[] storage;
public static long trip(int n)
{
if(n<=2)
return n;
if(storage[n]<0)
return storage[n];
long result= trip(n-1) + trip(n-2)+trip(n-3);
storage[n]= result;
return result;
}
public static void main(String[]args)
{
Scanner scan= new Scanner(System.in);
long n = scan.nextLong();
storage= new long[n+1];
long res= trip(n);
System.out.println(res);
}

一开始我觉得它很好,但当我编译它时,它向我抛出了多个错误

Triponacci.java:22: error: incompatible types: possible lossy conversion from long to int
storage= new long[n+1];
^
Triponacci.java:23: error: incompatible types: possible lossy conversion from long to int
long res= trip(n);
^

我该怎么做才能让它发挥作用?提前感谢您的时间和回答。

由于边界问题,我认为应该使用long而不是int。预期工作良好,但效果良好。

您要的是一个long,这是一个可以容纳比int更大数字的基元类型。如果你的意图是允许用户输入"Triponacci(4000000123451(",那么你就有一个更大的问题,这个问题太大了,需要BigInteger,而且可能是一个更好的算法。使用long是有意义的,但仅适用于输出(总和-存储阵列的值(NOT用于输入。

请注意,在java数组中,必须具有int索引,因此从这个意义上说,如果您真的希望用户能够输入超出int范围的数字(大约为:加20亿到减20亿(,那么在任何情况下都需要一个复杂得多的算法。

注意:您的代码有一个错误;如果CCD_ 4小于0?我想你的意思是比0更多

static long[] storage;
public static long trip(int n) {
if (n <= 2) return n;
if (storage[n] != 0) return storage[n];
return storage[n] = trip(n-1) + trip(n-2) + trip(n-3);
}
public static void main(String[]args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
storage = new long[n+1];
long res = trip(n);
System.out.println(res);
}

相关内容

  • 没有找到相关文章

最新更新