OpenJudge NOI 1.13 30:1的个数
【题目考点】 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出现的次数。
#includeusing 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; }



