传送门
思路:找和2的关系;
我写的比较复杂,可以用位运算又快又对~~~
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=998244353;
int suan(int ss){
int sum=0;
for(int i=1;;){
if(ss>=i){
sum++;
ss-=i;
if(ss>=i*2)
i*=2;
}else if(ss<i&&ss>0){
i/=2;
}else break;
}
return sum;
}
int main()
{
int t,n;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
int ans=0;
if(n&1)ans++,n--;
else ans+=2,n-=2;
int cmp=n/2;
ans+=suan(cmp);
printf("%d\n",ans);
}
return 0;
}