题目链接
这道题的核心还是利用,大数+题目的fibonacci来做
代码如下:
#pragma warning(disable:4996);
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
using namespace std;
struct biginteger
{
int a[1000];
int size;
void init()
{
size = 0;
for (int i = 0;i < 1000;i++) a[i] = 0;
}
void set(int x)
{
init();
do {
a[size++] = x % 10000;
x /= 10000;
} while (x != 0);
}
void output()
{
for (int i = size - 1;i >= 0;i--)
{
if (i != size - 1) printf("%04d", a[i]);
else printf("%d", a[i]);
}
printf("\n");
}
biginteger operator +(const biginteger &b)const {
biginteger ret;
ret.init();
int carry = 0;
for (int i = 0;i < size||i<b.size;i++)//小于两个中的任一个,都可以继续,直到都不满足,符合加法规则
{
int tmp = carry + a[i] + b.a[i];
carry = tmp / 10000;
tmp %= 10000;
ret.a[ret.size++] = tmp;
}
if (carry != 0) {
ret.a[ret.size++] = carry % 10000;
}
return ret;
}
}number[7100];
void f()
{
number[1].set(1);
number[2].set(1);
number[3].set(1);
number[4].set(1);
for (int i = 5;i < 7100;i++)
{
number[i] = number[i - 1] + number[i - 2] + number[i - 3] + number[i - 4];
}
}
int main()
{
f();
int t;
while (cin >> t)
{
number[t].output();
}
return 0;
}