【问题标题】:Fibonacci's Code with ACM Library带有 ACM 库的斐波那契代码
【发布时间】:2014-08-15 15:04:56
【问题描述】:

您好,我对在此页面中找到的此代码有疑问。 我已经自己完成了斐波那契,但我认为这更好。 这个想法是你必须选择“n”并且代码工作直到你达到n。 它适用于第一个数字,但我不知道为什么当我选择例如 n = 70 时会有负数!!我不知道为什么会这样,但我无法解决它,我试图解决我书中的所有练习,因为这些方法对我来说很难。对不起我糟糕的英语。

public class NewFibonacci extends ConsoleProgram {
 int a = 0;
 int b = 1;

public void run() {
    int n = readInt ("n: ");
    for(int i = 0; i <= n; i++) {
        println (fibonacci (n));
    }
}

private int fibonacci(int n) {
    int c = a + b;
    a = b;
    b = c;
    return c;
}
}           

谢谢!

【问题讨论】:

  • “n”是您要打印的序列中的元素数,还是“n”是您要查找的斐波那契数?

标签: java numbers fibonacci acm-java-libraries


【解决方案1】:

一个 int 被限制为一定数量的位。如果您使用的是 Java,那么 int 可以容纳 32 位(范围从 -2,147,483,648 到 2,147,483,647)。一旦斐波那契数高于 int 的最大值,您将开始看到负值。

【讨论】:

    【解决方案2】:

    Ryan 是正确的 - 在达到 int 的最大限制后,它将变为负数。您发布的代码将打印前 n+1 个斐波那契数(您从 0 开始到 70 = 71 个数字)。第 71 个斐波那契数是 308,061,521,170,129,远远超过 int 的限制。

    不要使用 int,而是使用 long,它的最大限制为 9,223,372,036,854,775,807,这至少可以让您达到 n=91(前 92 个斐波那契数 - 最多 7,540,113,804,746,346,429)。

    【讨论】:

      【解决方案3】:

      你可以试试这个代码,你会得到一个accpet。

      public class NewFibonacci extends ConsoleProgram {
       long long a = 0;
       long long b = 1;
      
      public void run() {
          int n = readInt ("n: ");
          for(int i = 0; i <= n; i++) {
              println (fibonacci (n));
          }
      }
      
      private int fibonacci(int n) {
          long long c = a + b;
          a = b;
          b = c;
          return c;
      }
      } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多