今天遇到一个非常有意思的题目 题目如下:
#include <stdio.h>
int func(int x
)
{
int countx
=0;
while(x
)
{
countx
++;
x
=x
&(x
-1);
}
return countx
;
}
int main()
{
int i
= func(12345);
printf("i=%d",i
);
getch();
return 0;
}
输出结果: 这道题该怎么算呢? 一开始我的做法是把它换成二进制,然后按照x&(x-1)去算。 通过计算我发现每一次进行x&(x-1)的计算就会把二进制数的最低位的1给去除掉。 所以它的规律就是:把二进制数(从低位到高位依次)变为0,直到把所有的1都变成0,然后退出循环。 那么countx的值就很好确定了。它原本是算循环的次数,而循环次数取决于二进制数1的个数,所以这个程序本质就是在计算十进制数转换为二进制数后1的个数。 那么下次遇到这个题目,只需把十进制数转换为二进制数,然后数二进制数里面1的个数即可。
转载请注明原文地址:https://blackberry.8miu.com/read-9100.html