#include<iostream>
#include<cstring>
#include<cmath>
#define MAX 90000000+1
using namespace std;
int main()
{
int T;
long long k;
long long fac[47];
long long sum[47];
fac[0]=fac[1]=1;
sum[0]=1;
sum[1]=2;
for(int i=2;i<=40;i++){
fac[i]=fac[i-1]+fac[i-2];
sum[i]=sum[i-1]+fac[i];
}
cin>>T;
while(T--)
{
cin>>k;
int time=0;
int g=0;
int flag=0,flag2=1,all=0;
while(k>0){
for(int i=0;i<50;i++){
if(sum[i]>=k){
flag=i+1;
if(flag2) all=flag;//all记录原始长度
flag2=0;
break;
}
}
for(int i=1;i<g-flag;i++){
cout<<"0";
time++;
}
cout<<"1";
time++;
k=k-1-sum[flag-2];
g=flag;
}
if(time!=all){
for(int i=1;i<=all-time;i++) cout<<"0";//最后补上0
}
cout<<endl;
}
return 0;
}
比如k=31(1010010),对应着7位,先输出1,然后k缩减至10(10010),对应着5位,于是输出1个0(7-5-1);然后再输出1,k继续缩减至2(10),对应着2位,于是输出2个0(5-2-1);然后再输出1,此时k=0了 可以用一个all保存原始位数的长度,然后用time表示我们已经处理的位数,即每次输出或0后,time++,最后剩余的位数all-time用0补完