题解 | #小q的数列#

小q的数列

https://www.nowcoder.com/practice/76796815518f4db5b800775581cda1e4

//有变量n,n',f(n),f(n')共四个
//step1:将十进制数n转换为二进制数a
//step2:求二进制数a中1的个数x,f(n')=f(n)=x;
//step3:最早出现的n'就是2的0次方一直加到2的X次方(2的a次方-1;
#include<stdio.h>
int main()
{
    long long int t = 0;
    long long int n = 0;
    long long int i = 0;
    scanf("%lld",&t);
    while(t--)//通过while循环来打印t行数据
    {
        long long int a = 0;
        long long int b = 0;
        scanf("%lld",&n);//输入每行数据
        while(n)//每行数据进行操作
        {
            n=n&(n-1);//判断一个数据的二进制有多少个1
            a++;//每一个1就加加,a的结果等于f(n)
        }
        for(i=0;i<a;i++)
        {
            b=b*2+1;
        }
        printf("%lld %lld\n",a,b);
    }
    return 0;
}

C语言刷题 文章被收录于专栏

自己从头开始刷的C语言

全部评论

相关推荐

02-11 14:29
已编辑
字节跳动_QA
Edgestr:这种的写代码最狠了
点赞 评论 收藏
分享
程序员花海_:项目描述写的太少了 多写一点 先写业务 再写技术
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务