一个正整数改写成2进制后,如果数字1的个数是偶数个,那么就称这个正整数是‘好数’.例如,正整数 6=(110
问题描述:
一个正整数改写成2进制后,如果数字1的个数是偶数个,那么就称这个正整数是‘好数’.例如,正整数 6=(110
上面没打完这里继续:就是一个‘好数’.将所有的‘好数’按小到大排列,第2010个是什么?
答
#include
#define ORDER 2010
/**
* 判断指定的正整数是否为好数(二进制表示时有偶数位 1)
* @param dwSample 指定的正整数
* @return 指定的正整数是好数则返回非零,否则返回零
*/
int isGood(unsigned long dwSample) {
int iCount;
if (dwSample == 0) {
return 0;
}
/* 依次将每一位移动到最低位 */
for (iCount = 0; dwSample != 0; dwSample >>= 1) {
/* 最低位为 1 则计数 */
if (dwSample & 1) {
++iCount;
}
}
return (iCount % 2) == 0;
}
void main() {
unsigned long dw;
int iCount;
/* 在双字节正整数范围内寻找 */
for (iCount = 0,dw = 1; dw != 0; ++dw) {
if (isGood(dw)) {
++iCount;
if (iCount == ORDER) {
printf("Found:%d !\n",dw);
return;
}
}
}
printf("Failed!\n");
}