Download
Edit

Re: Fibonacci.cpp

jbelljbell
BELLUZ Jany
Added on 2010-01-15 21:15:28

 

Fibonacci.cpp - Show - Edit - Download
Re: Fibonacci.cpp - Show - Edit - Download - Differences
ConstString - Show - Edit - Download - Differences

 

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
#define TYPE unsigned long
#define BASE 1000000000
#define LENGTH 9
 
using namespace std;
 
class VeryLongInt {
        public:
        VeryLongInt(long init = 0) :m_array() {
                while ( init != 0 ) {
                        m_array.push_back(init%BASE);
                        init=init/BASE;
                }
        }
        
        VeryLongInt(const VeryLongInt & toCopy) {
                m_array = toCopy.m_array;
        }
        
        ~VeryLongInt() {
        }
        
        const VeryLongInt operator+ (const VeryLongInt & other) const {
                VeryLongInt result;
                vector<TYPE> other_=other.m_array, m_array_=m_array;
                TYPE carry = 0;
                long size = max(m_array.size(), other.m_array.size());
                other_.resize(size, 0);
                m_array_.resize(size, 0);
                result.m_array.resize(size, 0);
                for ( long i = 0; i < size; i++ ) {
                        result.m_array[i] = (m_array_[i] + other_[i] + carry)%BASE;
                        carry = (m_array_[i] + other_[i] + carry)/BASE;
                }
                if ( carry != 0 )
                        result.m_array.push_back(carry);
                return result;
        }
        
        void output(ostream & out) {
                long aSize = m_array.size();
                out << static_cast<unsigned long>(m_array[aSize-1]);
                for ( long i = aSize - 2; i >= 0; i-- ) {
                        ostringstream oss;
                        oss << m_array[i];
                        string number = oss.str();
                        long nSize = number.size();
                        for ( long j = 0; j < LENGTH - nSize; j++ )
                                out << "0";
                        out << static_cast<unsigned long>(m_array[i]);
                }
        }
        private:
        vector<TYPE> m_array;
};
 
int main() {
        VeryLongInt a=0, b=1, c=1;
        long n=0;
        cout << "Vous voulez le n° : ";
        cin >> n;
        for ( long i=2; i<=n; i++ ) {
                c=b+a;
                a=b;
                b=c;
        }
        cout << "Voici : " << endl;
        c.output(cout);
        cout << endl;
        return 0;
}