#include<iostream>
using namespace std;
const int RADIX=10,M=1003;//RADIX表示进制
void add(int*a,int* b)//两个大整数求和,和保存在数组a中
{
int i,carry=0;//carry表示进位
for(i=0;i<M+1;i++)
{
a[i]=a[i]+b[i] +carry;
carry=a[i]/RADIX;
a[i]=a[i]%RADIX;
}
}
int main()
{
int *a=new int[M];
int *b=new int[M];
int *temp=new int[M];
int i,n;
while(cin>>n)
{
a[0]=1;
b[0]=1;
for(i=1;i<M;i++)
a[i]=b[i]=0;
for(i=3;i<=n;i++)
{
add(a,b);
temp=a;
a=b;
b=temp;
}
int k=M-1;//过滤前面的0
while(b[k]==0)
{k--;}
if(k<0)
cout<<0;
else
{
for(;k>=0;k--)
{
cout<<b[k];
}
}
cout<<endl;
}
return 0;
}
原文网址:http://www.cnblogs.com/xuzhichuang/archive/2010/08/24/1807625.html
题目:HUNNU OJ 10408 , ZOJ 1828