Fibonacci Numbers 基于大数加法

来源:互联网 发布:老牛登录器源码 编辑:程序博客网 时间:2024/06/05 04:16
Problem description  Fibonacci数列是一个典型的递归数列,F1 = F2 = 1;Fn = Fn-2 + Fn-1,当n>=3时。 Input  每一行一个整数,直到EOF。Output  每一行输出对应的Fibonacci数。本题的输出都不会超过1000位。Sample Input
10020
Sample Output
3542248481792619150756765
 
//AC的代码,VC++6.0通过
#include<iostream>#include<string>using namespace std;const int M=6000;//这道题坑爹的卡数据string add(string st1, string st2){string st;int a[1100]={0},b[1100]={0};int len1,len2,len,i;len1=st1.length();len2=st2.length();for(i=len1-1;i>=0;i--)a[len1-1-i]=st1[i]-'0';for(i=len2-1;i>=0;i--)b[len2-1-i]=st2[i]-'0';len=(len1>len2)?len1:len2;for (i=0;i<len;i++){a[i]=a[i]+b[i];if (a[i]>=10){a[i+1]+=a[i]/ 10;a[i]%=10;if (i==len-1) len++;}}   st="";   for (i=0;i<len;i++)    st+=a[len-1-i]+'0';   return st;}int main(){int n,i;string p[M];p[0]="0"; p[1]="1";for(i=2;i<4800;i++)//卡数据p[i]=add(p[i-1],p[i-2]);while(cin>>n){cout<<p[n]<<endl;}return 0;}

 

原文出处:http://hi.baidu.com/zch109/item/daf7a3a123328899141073df


这道题坑爹的卡数据啊!

HUNNU OJ 10509

 

下面是超时的代码:

 

#include<iostream>#include<string>using namespace std;const int M=1000;string p[M];string sum(string s1,string s2){if(s1.length()<s2.length()){string temp=s1;s1=s2;s2=temp;}int i,j;for(i=s1.length()-1,j=s2.length()-1;i>=0;i--,j--){s1[i]=char(s1[i]+(j>=0? s2[j]-'0':0));if(s1[i]-'0'>=10){s1[i]=char((s1[i]-'0')%10+'0');if(i) s1[i-1]++;else s1='1'+s1;//?求解释}}return s1;}int main(){int n;while(cin>>n){p[0]="0"; p[1]="1";for(int i=2;i<=n;i++)p[i]=sum(p[i-1],p[i-2]);cout<<p[n]<<endl;}return 0;}


 

 

原创粉丝点击