【题目链接】
【题目考点】
1. 数制
【解题思路】
数字n在二进制下的按位权展开式为:
n
=
d
0
∗
2
0
+
d
1
∗
2
1
+
.
.
.
+
d
x
∗
2
x
n = d_0*2^0+d_1*2^1+...+d_x*2^x
n=d0∗20+d1∗21+...+dx∗2x
对数字n做二进制下的数字拆分,每次对2取模,得到当前数字的最低位。再整除2,去掉当前数字的最低位。重复进行,直到该数字变为0。统计这一过程中某一位数字是1出现的次数。
【题解代码】
解法1:数字拆分
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, ct = 0;
cin >> n;
for(int a = n; a > 0; a /= 2)
{
if(a%2 == 1)
ct++;
}
cout << ct;
return 0;
}