set里的使用count()判断元素是否在set容器中。若在:返回1,若不在,返回0。
set<int> st;
st.clear()//清空
st.count()//查找是否有
st.insert()//插入元素
斐波那契数列进制运用前缀和
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[100],s[100];
signed main()
{
int t;
cin>>t;
a[1]=1,a[2]=2;//斐波那契
s[1]=1,s[2]=3,s[0]=0;//前缀和
for(int i=3;i<=46;i++)
{
a[i]=a[i-1]+a[i-2];
s[i]=s[i-1]+a[i];
}
while(t--)
{
int x;
cin>>x;
int sum=0;
for(int i=46;i>=1;i--)
{
if(s[i-1]<x)//下一个前缀和比x小,肯定要加a[i]这个数
{
x-=a[i];
sum+=pow(2,i-1);
}
}
cout<<sum<<endl;
}
return 0;
}