题解 | #小q的数列#
小q的数列
https://ac.nowcoder.com/acm/problem/15979
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
// int func(int x)
// {
// int num=0,i=0;
// while((x>>i)!=0)
// {
// if((x>>i)&1)
// num++;
// i++;
// }
// return num;
// }
int func(long long x)
{
if(x==0)
return 0;
if(x==1)
return 1;
return func(x/2)+func(x%2);
}
int main()
{
int t;
scanf("%lld",&t);
for (int i=0;i<t;i++)
{
long long n;
scanf("%lld",&n);
long long n2 = (1LL<<func(n))-1;
printf("%d %lld\n",func(n),n2);
}
}
重点:
- 1.本题n和n2数据范围达到long long级别了
- 2.求n2时要用1LL
- 3.本题时间限制很严,不能根据式子的意义逐个移位判断1的个数,这样会超时(如注释func代码);需要用递归完成func。