这样就行,只要你的MAX_SIZE够大就能实现,不过10000000的话感觉用vector更快点……
#include <iostream>
using namespace std;
#define MAX_SIZE 1000 //十进制位数,用每个整数代表一位数,虽然浪费,但比较好操作
void init(unsigned value[]) //initiate the variable arr
{
for(int i=0;i<MAX_SIZE;i++)
*(value+i)=0;
}
void real(unsigned value[]) //判定,使每个数都为0-9
{
for (int i=0;i<MAX_SIZE-1;i++)
{
if(*(value+i)>9)
{
*(value+i)=(*(value+i))-10;
(*(value+i+1))=(*(value+i+1))+1;
}
}
}
void add(unsigned value1[],unsigned value2[],unsigned value3[])//两者的数相加的值赋为前者
{
for (int i=0;i<MAX_SIZE;i++)
{
*(value1+i)=*(value2+i) + *(value3+i);
}
real(value1);
}
void assign_value(unsigned value1[],unsigned value2[])//赋值,后者的数赋为前者
{
for (int i=0;i<MAX_SIZE;i++)
{
*(value1+i)=*(value2+i);
}
}
void show(unsigned value[]) //显示
{
unsigned i; //记录下标
for (i=MAX_SIZE-1;i>0;i--) //前缀为零的不显示
{
if(*(value+i)!=0)
break;
}
for (int t=0;t<=i;t++)
{
cout<<*(value+i-t);
}
cout<<' ';
}
void getvalue(unsigned value[],unsigned t)
{
if(1==t||2==t)
{
*(value+0)=1;return ;
}
unsigned value1[MAX_SIZE]={0}; *(value1+0)=1; //the first parameter
unsigned value2[MAX_SIZE]={0}; *(value2+0)=1; //the second parameter
for(int i=2;i<t;i++)
{
add(value,value2,value1);
assign_value(value1,value2);
assign_value(value2,value);
}
}
int main()
{
unsigned value[MAX_SIZE]={0};
for (int i=1;i<=10000;i++)
{
init(value);
getvalue(value,i);
show(value);
cout<<endl;
}
return 0;
}