首页 > 试题广场 >

求int型正整数在内存中存储时1的个数

[编程题]求int型正整数在内存中存储时1的个数
  • 热度指数:410360 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}对于给定的 \sf{int} 型的十进制正整数 n ,统计其在内存中存储时 1 的个数。换句话说,即统计其二进制表示中 1 的个数。

输入描述:
\hspace{15pt}在一行上输入一个整数 n \left( 0 \leqq n < 2^{31} \right) ,代表给定的数字。


输出描述:
\hspace{15pt}在一行上输出一个整数,代表 n 的二进制表示中 1 的个数。
示例1

输入

10

输出

2

说明

\hspace{15pt}十进制 110 的二进制表示如下:
\hspace{23pt}\bullet\,十进制 (1)_{10} 等于二进制 (1)_{2}
\hspace{23pt}\bullet\,十进制 (2)_{10} 等于二进制 (10)_{2}
\hspace{23pt}\bullet\,十进制 (3)_{10} 等于二进制 (11)_{2}
\hspace{23pt}\bullet\,十进制 (4)_{10} 等于二进制 (100)_{2}
\hspace{23pt}\bullet\,十进制 (5)_{10} 等于二进制 (101)_{2}
\hspace{23pt}\bullet\,十进制 (6)_{10} 等于二进制 (110)_{2}
\hspace{23pt}\bullet\,十进制 (7)_{10} 等于二进制 (111)_{2}
\hspace{23pt}\bullet\,十进制 (8)_{10} 等于二进制 (1000)_{2}
\hspace{23pt}\bullet\,十进制 (9)_{10} 等于二进制 (1001)_{2}
\hspace{23pt}\bullet\,十进制 (10)_{10} 等于二进制 (1010)_{2}
示例2

输入

0

输出

0
import java.util.Scanner;
import java.util.Stack;


public class ShuZiDianDao {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
while(sc.hasNextInt()){
String s=Integer.toBinaryString(sc.nextInt()).toString();
int num=0;
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='1'){
num++;
}
}
System.out.println(num);
}
}

}

发表于 2016-02-26 13:00:02 回复(1)
n = int(input())
a = bin(n)
b = str(a)
print(b.count('1'))

发表于 2022-04-06 14:59:07 回复(2)
num=int(raw_input(""))
num=str(bin(num))
len1=len(num)
count=0
for i in range(2,len1):
    if num[i]=='1':
        count+=1
print count
下面是C++实现的代码
#include<iostream>
using namespace std; int main() { int num = 0; cin >> num; int count = 0; while (num) { count++; num = num&(num - 1); } cout << count << endl; system("pause"); return 0; }

编辑于 2016-07-04 20:57:55 回复(0)
# 输入
num = int(input())
# 1的个数,初始化为0
count1 = 0
# 遍历num装换为二进制后的字符串
for i in str(bin(num)):
    # 若字符为1则加1
    if i == '1':
        count1 += 1
# 打印二进制中1的个数
print(count1)
发表于 2019-11-30 20:48:35 回复(1)
print bin(int(raw_input())).count('1')  
发表于 2016-10-19 15:11:07 回复(1)
#include<iostream>
using namespace std;

int main(){
    int n;
    cin>>n;
    int count=0;
    while(n){
        n=n&(n-1);
        count++;
    }
    cout<<count<<endl;
    return 0;
}

发表于 2016-04-04 18:56:05 回复(0)
n = int(input())
num_1 = 0
while n :
    if n%2:
        num_1 += 1
    n = n // 2
print(num_1)

发表于 2022-07-19 18:49:07 回复(0)
#include<bits/stdc++.h>
using namespace std;

int main()
{    
    unsigned int data;
    cin >> data;
    
    int count = 0;
    int temp;
    while(data)
    {
        temp = data%2;
        data /= 2;
        if(temp == 1)
            count++;
        
    }
    cout << count << endl;
    
    return 0;
}

发表于 2022-07-05 16:30:35 回复(0)
s=int(input())

ss=bin(s)

print(ss.count("1"))
#十进制int(x,16),十六进制hex(),二进制bin(),八进制oct()
发表于 2022-05-18 13:12:17 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        int count = 0;
        while(a != 0) {
        int res = a % 2;
        a = (a - res) / 2;
            count += res;
        }
        System.out.println(count);
    }
}
发表于 2022-03-24 19:32:08 回复(0)
print(str(bin(int(input()))[2:]).count('1'))
发表于 2022-03-10 20:21:08 回复(0)
import java.util.*;
 
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int count = 0;
        while(n!=0){
            if((n&1)==1){
                count++;
            }
            n >>=1;
        }
        System.out.println(count);
    }
}

请在这里输入引用内容

发表于 2022-03-01 14:29:05 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int num = sc.nextInt();
            String str = Integer.toBinaryString(num);
            str = str.replaceAll("0","");
            System.out.println(str.length());
        }
        sc.close();
    }   
}
使用java语言,将数字转为二进制字符串之后,一般是遍历字符串,统计1的个数,这里取巧,通过替换0为空字符,剩下的就是1,然后计算二进制字符串的长度。
发表于 2022-02-17 22:40:48 回复(0)
#include<stdio.h>
int main(){
    int m,i;
    while(scanf("%d",&m)!=EOF){
        i=0;
        while(m>0){
            if(m%2==1) i++;
            m/=2;
        }printf("%d\n",i);
    }
    
}

发表于 2021-12-28 20:59:01 回复(0)
#include <stdio.h>
int main()
{
    int input;
    int count = 0;
    scanf("%d",&input);

    for(int i=0;i<32;i++)
    {
        if(input&0x1<<i)
            count++;
    }
    printf("%d",count);
}

发表于 2021-11-14 23:15:03 回复(0)
bin_num = str(bin(int(input())))    # 允许套娃 
print(bin_num.count('1'))
发表于 2021-11-08 23:39:48 回复(0)
方法的话就是单纯的位运算的方法,大概思路也基本一致,这里就提供一个看起来比较简短的写法(实际上做的东西一样)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int count = 0;
        
        while (n > 0) {
            count += (n & 1);
            n >>= 1;
        }
        
        System.out.println(count);
    }
}


发表于 2021-10-02 04:33:43 回复(0)
#include <stdio.h>

int main(int argc, char *argv[])
{
    int num = 0;
    int cnt = 0;
    
    scanf("%d", &num);
    while(num)
    {
        num = num&(num-1);
        cnt++;
    }
    printf("%d", cnt);
    
    return 0;
}

发表于 2021-09-17 17:26:22 回复(0)
小白的python递归:
def to2(x, n = 0):
    if x%2 == 1:
        n += 1
    if x < 1:
        print(n)
    else:
        to2(x//2, n)
        
to2(int(input()))


发表于 2021-08-02 23:16:24 回复(0)
用数组来装2进制数,double装不下。

System.out.println("数组".split ("1").length);
split总数输出错误的长度,原因未知。
发表于 2021-05-25 00:13:22 回复(0)