之前也写过输出斐波那契数的程序,当然也只是前几十位。所以也没注意到当输出大于47位之后 ,就发生溢出了。直到某一天,老师让我们输出47位之后的数我才发现这个问题。于是就花了一点时间写了出来。
其实这个问题归根到底就是一个大数相加的问题,当然网上也能搜到很多关于大于数加减乘除的模版。我现在就换另外一种方法来计算大数相加的问题。思路就是分别用两个字符串来保存两个数,然后对应位分别相加,满10进1,就行了。理论上是没有上限的(不会溢出),但受计算机的限制,在我自己的电脑上也只能输出几万项斐波那契数。不多说,上代码。
//定义了一个大数类
#ifndef BIGNUM_H
#define BIGNUM_H
#include <iostream>
using namespace std;
class BigNum
{
private:
string num;
int length;
public:
BigNum()
:num("NULL")
,length(0)
{}
BigNum(string &n)
:num(n)
,length(n.size())
{}
BigNum(string n,int l)
:num(n)
,length(l)
{}
void getNum() const;
const void clear();
const BigNum &operator