#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