您的位置:首页 > 编程语言

编程之美--2.4 1的数目之扩展问题

2017-03-04 21:19 330 查看
思路与书中2.4的类似,只是把十进制换成了二进制,只需在iFactor*10的地方,改成iFactor*2即可。

代码如下:

#include <iostream>
#include<bitset>

using namespace std;

const unsigned SYSTEM = 2;

unsigned long Sum1s(unsigned long n)
{
unsigned long iCount = 0;
unsigned long iFactor = 1;
unsigned long iLowerNum = 0;
unsigned long iCurrNum = 0;
unsigned long iHigherNum = 0;
while (n / iFactor != 0)
{
iLowerNum = n - (n / iFactor) * iFactor;
iCurrNum = (n / iFactor) % SYSTEM;
iHigherNum = n / (iFactor * SYSTEM);
switch (iCurrNum)
{
case 0:
iCount += iHigherNum * iFactor;
break;
case 1:
iCount += iHigherNum * iFactor + iLowerNum + 1;
break;
default:
iCount += (iHigherNum + 1) * iFactor;
break;
}
iFactor *= SYSTEM;
}
return iCount;
}

int main()
{
unsigned long n = 0x4;
cout << "binary number: " << bitset<8>(n) << endl;
cout << "number of 1: " << Sum1s(n) << endl;
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程之美