输入一个非负整数,求它变成二进制后1的个数(提示:用bin函数)。
输入格式:
输入一个正整数。
输出格式:
输出1的个数。
输入样例1:
在这里给出一组输入。例如:
37
输出样例1:
在这里给出相应的输出。例如:
3
输入样例2:
在这里给出一组输入。例如:
0
输出样例2:
在这里给出相应的输出。例如:
0
代码1:
#include<iostream>
using namespace std;
int num(int n) {
int count = 0;
while (n != 1 && n != 0) {
if (n % 2 != 0) {
count++;
}
n = n / 2;
}
if (n == 1) {
count++;
}
return count;
}
int main() {
int n;
cin >> n;
cout << num(n);
}
分析:
就输入样例1来说,37的二进制表示是100101,有3个1,所以输出3。
二进制转化十进制方法:除基取余法
在除基取余法中,只有当被除数为奇数时,结果才会出现1,并且除基取余法的最后一步,一定是2除以2或者1除以2,2除以2的商是1,1除以2的结果是0,这个可以当做循环结束的条件。
代码2:用itoa函数
#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
int main() {
char s[256];
int n;
cin >> n;
itoa(n, s, 2);
int length = strlen(s);
int count = 0;
for (int i = 0; i < length; i++) {
if (s[i] == '1') {
count++;
}
}
cout << count;
}
分析: