关于求解c语言超范围整数的二进制数中0的个数的问题#

img

求解c语言超范围整数的二进制数中0的个数的问题

#include<stdio.h>
#include<string.h>
int main(void){
    int t,x,i,count=0;
    scanf("%d",&t);
    for(i=0;i<t;i++){
        scanf("%d",&x);
        while(x){
            if(!(x%2))
              count++;
            x/=2;
        }
        printf("%d\n",count);
    }
    return 0;
}

你的整数范围最大到10^18,所以不能用int,会溢出
改成 long long吧,scanf对应是 %lld

这段代码的目的是统计超范围整数的二进制数中0的个数。具体实现方法是使用scanf函数读取一个整数,然后使用while循环判断该整数的二进制表示中是否存在0。如果该二进制表示中不存在0,则将当前计数器加1。最后使用printf函数输出计数器的值即可。