【问题标题】:Need help cleaning up fibonacci sequence using C++ please需要帮助使用 C++ 清理斐波那契数列
【发布时间】:2013-10-02 20:31:19
【问题描述】:

我对 C++ 还是很陌生,并决定制作一个斐波那契数列。它有效(哇!),但效果不如我所愿。

我的意思是说,例如我告诉我的程序计算我将得到的序列的前 10 个项

"0, 1, 1" 然后我必须为每个额外的数字按 Enter 键,直到它达到 10,在这种情况下程序返回 0 并结束。

如何让程序显示我想要显示的所有数字,而无需为每个额外的数字按 Enter 键?

这是我的脚本:

#include <iostream>
using namespace std;

int main()
{
    int FibNum;
    cout << "How many numbers of the Fibonacci Sequence would you like to see? \n\n";
    cin>> FibNum;
    cin.ignore();
    int a = 0;
    int b = 1;
    int c = 2;
    cout << "Fibonacci Sequence up to " << FibNum << " terms.\n\n";
    cout << a << "\n" << b << "\n";

    for (int c = 2; c < FibNum; c++) {
        int d = a + b;
        cout << d;
        cin.ignore();
        a = b;
        b = d;
    }
}

提前感谢您的帮助!

附:另外,如果您发现我做的任何糟糕的事情,请随时纠正我,我很清楚我可能做错了很多,我只是在努力学习。 :]

【问题讨论】:

  • c.ignore();移出循环:它一直等到输入一个字符(如果您输入,例如123456,它将让循环运行7次,每个数字一次,一次换行符)。
  • @DietmarKühl,谢谢,这确实有效,但是,它会导致同样严重的问题,现在所有数字都显示为“12358132134”而不是 1 2 3 5 等。是否有任何适当的解决方法为此还是我应该尝试在循环中添加“\n”?编辑:我刚决定添加
  • 你当然可以自己解决这个问题。
  • 只需在每个数字后添加一个换行符 ('\n'):std::cout &lt;&lt; d &lt;&lt; '\n';
  • @DietmarKühl 好吧,我就是这么做的,我只是想看看是否有更有效的方法,但我想只要添加一个“\n”就可以了,哈哈。再次感谢:]

标签: c++ fibonacci


【解决方案1】:

一些事情:

1) 删除 int c = 2;,因为您要在 for 循环内重新定义 c

2) 在for 循环中删除cin.ignore();: 行:这将解决您的“输入”问题;该行等待一些输入然后忽略它。

3) 在输出中添加一些空格:例如cout &lt;&lt; d &lt;&lt; ' ' 所以你们的号码是分开的。

4) [确认 vincent_zhang] 考虑将uint64_t 作为abd 的数据类型。这是 C++11 中的标准类型。它是一个 64 位无符号整数类型;足以应付大量的条款。

还有一件小事,与个人意见接壤,

5) 使用++c 而不是c++,因为前者永远不会运行得更慢,因为至少在概念上,后增量必须获取原始值的副本。

【讨论】:

    【解决方案2】:

    除了前面的答案,

    1. 为了更好地格式化输出,通过改变这个来添加空格

      cout << d; 
      

      cout << d << " ";
      
    2. 您可能需要将abd 的类型从int 更改为double 以防止溢出。

      (如果您在代码中添加了FibNum=100,您应该能够观察到溢出,这意味着您将在序列末尾得到一些不正确的数字。)

    【讨论】:

    • +1 推荐数据更改并启发我谈论新的 C++11 数据类型。另请注意,double 在整数运算中精确到非常大的数值。
    • @Bathsheba 我对 C++11 了解不多,但会去做一些研究;)谢谢你的信息!
    【解决方案3】:

    将 cin.ignore() 移出循环,则无需输入即可打印所有 10 个斐波那契数列数

    【讨论】:

      猜你喜欢
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 2015-06-05
      • 2021-11-30
      • 2019-04-06
      相关资源
      最近更新 更多