Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3804 Accepted Submission(s): 1498
#include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <cmath> #include <iostream> #include <algorithm> #include <string> #include <map> using namespace std; const int maxn=500; const int base=1000000; const int INF=99999999; const int MIN=-INF; char a[maxn][500]; char* add(char*a,char*b)//大数加法 { int lena=strlen(a); int lenb=strlen(b); int i,j,k; char c[500]; if(lena<lenb) { strcpy(c,a); strcpy(a,b); strcpy(b,c); } int A[500]= {0},B[500]= {0}; for(j=0,i=lena-1; i>=0; i--,j++) A[j]=a[i]-‘0‘; int lenA=j; for(i=lenb-1,j=0; i>=0; i--,j++) B[j]=b[i]-‘0‘; int lenB=j; for(i=0; i<lenB; i++) A[i]+=B[i]; for(i=0; i<500; i++) { if(A[i]>9) { A[i+1]+=A[i]/10; A[i]%=10; } } for(i=500-1; i>=0; i--)if(A[i]!=0)break; for(j=0; i>=0; i--) c[j++]=A[i]+‘0‘; c[j]=‘\0‘; return c; } int comper(char*a,char*b)//自定义比较函数 相同是0 大于是1 小于是-1 { int lena=strlen(a); int lenb=strlen(b); if(lena>lenb) return 1; else if(lena<lenb) return -1; else if(lena==lenb) { for(int i=0; i<lena; i++) if(a[i]<b[i]) return -1; else if(a[i]>b[i]) return 1; } return 0; } int main() { int n,m,i,j,k,t; a[1][0]=‘1‘; a[2][0]=‘2‘; for(i=3; i<=maxn; i++) { strcpy(a[i],add(a[i-1],a[i-2])); } //for(i=1;i<50;i++) // cout<<a[i]<<endl; char a1[maxn],b1[maxn]; while(cin>>a1>>b1) { int lena1=strlen(a1); int lenb1=strlen(b1); if(lena1==1&&lenb1==1&&a1[0]==‘0‘&&b1[0]==‘0‘)return 0; int cnt=0; for(i=1; i<maxn; i++) { if(comper(a[i],a1)>=0&&comper(a[i],b1)<=0) cnt++; } cout<<cnt<<endl; } return 0; }
原文地址:http://www.cnblogs.com/a666999/p/3746365.html