Pinary 数 (Pinary,Seoul 2005,LA 3357)
1 #include <iostream> 2 #include <string.h> 3 #include <string> 4 #include <fstream> 5 #include <algorithm> 6 #include <stdio.h> 7 #include <vector> 8 #include <queue> 9 #include <set> 10 #include <cmath> 11 using namespace std; 12 const double eps = 1e-8; 13 const double pi=acos(-1.0); 14 const int INF=0x7fffffff; 15 unsigned long long uINF = ~0LL; 16 #define MAXN 10000007 17 typedef long long LL; 18 int a[10000]; 19 void init() 20 { 21 a[1]=a[2]=1; 22 for(int i=3;i<=40;i++) 23 a[i]=a[i-1]+a[i-2]; 24 } 25 string get(string x,int n) 26 { 27 if(n==0)return x; 28 for(int i=1;i<=40;i++) 29 if(n<=a[i]) 30 { 31 x[x.length()-i]='1'; 32 return get(x,n-1); 33 } 34 else n-=a[i]; 35 } 36 int main() 37 { 38 init(); 39 int n,T;scanf("%d",&T); 40 while(T--) 41 { 42 scanf("%d",&n); 43 string ans="1"; 44 45 for(int i=1;i<=40;i++) 46 if(n<=a[i]) 47 { 48 for(int j=1;j<i;j++)ans+='0'; 49 // cout<<ans<<endl;system("pause"); 50 ans=get(ans,n-1); 51 break; 52 } 53 else n-=a[i]; 54 cout<<ans<<endl; 55 } 56 57 return 0; 58 }
斐波那契数列~~