需要帮助使用C ++清理斐波纳契序列

时间:2013-10-02 20:31:20

标签: c++ fibonacci

我仍然对C ++很新,并决定制作一个斐波那契序列。它起作用了(哇!)但它并没有像我希望的那样好。

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

“0,1,1”然后我必须按下每个附加数字的输入,直到它达到10,在这种情况下程序返回0并结束。

如何让程序显示我想要的所有数字,而无需另外输入一个?

这是我的剧本:

#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;
    }
}

提前感谢您的帮助!

P.S。另外,如果你发现我正在做的任何可怕的事情,请随意纠正我,我很清楚我可能做错了很多,我只是想学习。 :

3 个答案:

答案 0 :(得分:5)

一些事情:

1)在int c = 2;循环中重新定义c时删除for

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

3)在输出中放置一些空格:例如cout << d << ' '所以你的号码是分开的。

4)[Acknowledge vincent_zhang]考虑转移到uint64_t作为abd的数据类型。这是C ++ 11中的标准类型。它是64位无符号整数类型;适用于大量条款。

和一件小事,接近个人观点,

5)使用++c代替c++,因为前者永远不会运行得更慢,因为从概念上讲,至少后增量必须采用原始值的副本。

答案 1 :(得分:2)

除了之前的答案,

  1. 要更好地格式化输出,请通过更改此

    来添加空白区域
    cout << d; 
    

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

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

答案 2 :(得分:1)

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