Java 为什么斐波那契级数的偶数位置之和给出否定答案?

Java 为什么斐波那契级数的偶数位置之和给出否定答案?,java,arrays,sum,runtime-error,fibonacci,Java,Arrays,Sum,Runtime Error,Fibonacci,java中的约束,应使用数组,当位置为偶数和a[i]时应计算和 import java.util.*; class abc { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int sum=0; int n=sc.nextInt(); int a[]=new int[n]; a[0]=1; a[1]=2; f

java中的约束,应使用数组,当位置为偶数和a[i]时应计算和

import java.util.*;
class abc
{
  public static void main(String[] args)
 {
    Scanner sc=new Scanner(System.in);
    int sum=0;
      int n=sc.nextInt();
      int a[]=new int[n];
      a[0]=1;
      a[1]=2;
      for(int i=2;i<n;i++)
      {
        a[i]=a[i-1]+a[i-2];
        if(a[i]<n && i%2==0)
        sum=sum+a[i];
      }
      System.out.println(sum);
  }
}

导入java.util.*;
abc班
{
公共静态void main(字符串[]args)
{
扫描仪sc=新的扫描仪(System.in);
整数和=0;
int n=sc.nextInt();
int a[]=新的int[n];
a[0]=1;
a[1]=2;

java中的for(int i=2;i是4个字节的长度,其范围为-2147483648到2147483647。因此在您的例子中
int
sum
是溢出的。因为当n=50时,febonacci级数给出的结果是12586269025。这超出了
int
的限制

因此,您应该使用
长的
来保存
。它是8字节,限制为-9223372036854775808到9223372036854775807

甚至您也需要使用长数组,因为您是在为数组元素赋值之后执行操作的。所以更新的代码应该是:

long sum = 0;
    final long a[] = new long[50];
    a[0] = 1L;
    a[1] = 2L;
    final int n = 50;
    for (int i = 2; i < n; i++) {
      a[i] = a[i - 1] + a[i - 2];
      if (a[i] < n && i % 2 == 0) {
        sum = sum + a[i];
      }
    }
    System.out.println(sum);
长和=0;
最终长a[]=新长[50];
a[0]=1L;
a[1]=2L;
最终整数n=50;
for(int i=2;i

注释(如Mmir建议):<代码>长也有限制,所以直到<强> n=92 < /强>,它将工作得很好。如果你可以有N> 92,你需要使用<代码> BigInteger < /代码>。这也有进一步的限制。所以请考虑你的代码中的这些限制。

BigInteger必须支持-2Integer.MAX\u值范围内的值 (独占)到+2 integer.MAX_值(独占),并且可能支持值 超出这个范围

实现说明:BigInteger构造函数和操作抛出 当结果超出支持的范围时出现算术异常 -2 integer.MAX_值(独占)到+2 integer.MAX_值(独占)

Fib(50)=12_586_269_025(参见示例)

爪哇,最大整数:2_147_483_647(go)

短篇故事短篇:使用long类型,当然:

  • 学会对结果的“大小”做出准确的猜测
  • 然后了解类型具有的约束,例如它们的最大值

换句话说,真正的答案是:计算中的每件事都有局限性。理解它们是非常重要的。

看起来你溢出了
int
类型。我建议推荐类似
biginger
over
long
的东西,因为
long
也会溢出到第92个fibonacci数左右我使用了一个if条件,在这个条件下,我将只在a[I]时计算求和是偶数,它小于n。如果我输入50,它应该只和2834,对吗?为什么我的if条件似乎不起作用,如果你解释一下这一点,它真的会很有帮助。它是3,8,21的和,对应于位置2,4和6。我使用了一个if条件,在这个条件下,我将只在a[I]时计算和是偶数,它小于n。如果我输入50,它应该只和2 8 34对吗?我的问题不仅仅是斐波那契,它是斐波那契数列偶数位置的和,这是我提到的约束条件给我的问题。我被告知使用数组。我仍然无法理解为什么if条件似乎“不起作用”ng.谢谢你的帮助。还有@GhostCat,我在提问的最初几天没有回答,因为我家里有人去世了,当时我没有使用互联网。我以为你很粗鲁,但后来我读了你的简历,所以没关系。我很抱歉听到你这么说。我不是故意粗鲁。这只是一种太常见的模式:人们离开都比当这种事发生在你身上10次、20次、50次时,你可能有时会发脾气。为此感到抱歉,并祝你一切顺利。