今天分享一道题目,用三种方法来求解
方法1
我们的十进制除10和取余数就可以得到我们每一位的数字,那我们的二进制也可
以
#include<stdio.h> int num_find_1(unsigned int n) { int count = 0; while (n) { if (1 == n % 2) { count++; } n /= 2; } return count; } int main() { int n = 0; scanf("%d", &n); int ret = num_find_1(n); printf("%d", ret); return 0; }
这是一种方法,另外一种就是我们可以用移位操作符来算
int num_find_1(int n) { int i = 0; int count = 0; for (i = 0; i < 32; i++) { if (((n >> i) & 1) == 1) { count++; } } return count; } int main() { int n = 0; scanf("%d", &n); int ret = num_find_1(n); printf("%d", ret); return 0; }
这个方法是不是也是特别妙呢,当然还有更妙的方法,请看!!!
int num_find_1(int n) { int i = 0; int count = 0; while (n) { n = n & (n - 1); count++; } return count; } int main() { int n = 0; scanf("%d", &n); int ret = num_find_1(n); printf("%d", ret); return 0; }
相信看完总会学会一种方法,今天的分享就到这里啦,不知道大家有没有注意到我的开头不一样了,嘻嘻。