當前位置:編程學習大全網 - 編程語言 - 精確計算斐波那契數列的任意項。已知數列的遞歸表達式:Fn=Fn-1+Fn-2+Fn-3,F0=0,F1=1,F2=1。

精確計算斐波那契數列的任意項。已知數列的遞歸表達式:Fn=Fn-1+Fn-2+Fn-3,F0=0,F1=1,F2=1。

//

// main.cpp

// 1064

//

// Created by jy zhou on 26/06/13.

// Copyright (c) 2013年 jy zhou. All rights reserved.

//

#include <iostream>

#include <iomanip>

#include <cstdio>

#include <cstring>

#include <limits>

#include <cmath>

#include <algorithm>

const int DIGITAL_CAPACITY=10;

const int MAX_LENGTH=1000;

using namespace std;

class high_precision

{

private:

int num[MAX_LENGTH],length;

public:

high_precision()

{

memset(num, 0, sizeof(num));

length = 0;

};

high_precision(int initial_num)

{

memset(num, 0, sizeof(num));

length = log10(initial_num);

for (int i=0; initial_num>0; initial_num/=DIGITAL_CAPACITY) {

num[i] = initial_num % DIGITAL_CAPACITY;

i++;

}

};

void add(const high_precision &adder)

{

for (int i=0;i<max(length,adder.length);i++)

{

num[i] += adder.num[i];

}

update();

}

void update()

{

int i;

for (i=0; num[i]>=DIGITAL_CAPACITY; i++) {

num[i+1] += num[i] / DIGITAL_CAPACITY;

num[i] %= DIGITAL_CAPACITY;

}

length = max(i, length);

}

void print()

{

for (int i=length-1; i>=0; i--) {

putchar(48+num[i]);

}

}

};

int main()

{

int n;

high_precision a(1),b(1);

cin>>n;

for (int i=2;i<n;i++)

{

if (i%2=0) a.add(b);

else b.add(a);

}

if (n%2 = 0) a.print;

else b.print;

return 0;

}

  • 上一篇:武岡市藍深職業技術學校怎麽樣
  • 下一篇:編程積木陀螺儀
  • copyright 2024編程學習大全網