最近被面试一道题目:求正整数X对应的二进制数中1的个数
我费劲脑袋想出一个方法 :
int count(int X) {
int num = 0;
while (X != 0) {
X &= X - 1;
num++;
}
return num;
}
比如8对应的二进制是1000其中1的个数是1个count(8)返回1
比如5对应的二进制是101其中1的个数是2个count(5)返回2
这个时间复杂度 是log 2^n(2是下标 n是上标)
但是 我发现可以引申到其他所有地方,就是求 “正整数X对应的N进制中K(0<=K<N)的个数”
下面是解决方法:
int count(int X, int N, int K) {
int num = 0;
while (X != 0) {
if (X % N == K)
num++;
X = X / N;
}
return num;
}
比如100对应的十进制是100其中1的个数是1个count(100,10,1)返回1
比如20140416对应的十进制是20140416其中4的个数是2个count(20140416,10,4)返回2