动态申请内存为了减少储存空间浪费
#include <iostream>
#include <algorithm>using namespace std;
//用fib[i][0]表示长度,低位在前
using namespace std;
int *fib[1005];
void add(int **num, const int *num1,int size1, const int *num2, int size2)
{
int digit = 1;
int i = 1, j = 1;
int len = max(size1, size2);
*num = new int[len + 2];
while (i <= size1 && j <= size2)
(*num)[digit++] = num1[i++] + num2[j++];
while (i <= size1)
(*num)[digit++] = num1[i++];
while (j <= size2)
(*num)[digit++] = num2[j++];
int carry = 0;
for (int i = 1; i != digit; ++i)
{
(*num)[i] += carry;
carry = (*num)[i] / 10;
(*num)[i] %= 10;
}
if (carry)
(*num)[digit++] = 1;
(*num)[0] = digit - 1;
}
int main(void)
{
fib[1] = new int[2];
fib[1][0] = 1;
fib[1][1] = 1;
fib[2] = new int[2];
fib[2][0] = 1;
fib[2][1] = 1;
for (int i = 3; i != 1001; ++i)
add(&fib[i], fib[i - 2], fib[i - 2][0], fib[i - 1], fib[i - 1][0]);
int n;
int T;
cin >> T;
while (T--)
{
cin >> n;
int len = fib[n][0];
while (len > 0)
cout << fib[n][len--];
cout << endl;
}
return 0;
}