首页 > 试题广场 >

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

[编程题]求int型正整数在内存中存储时1的个数
  • 热度指数:420833 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}对于给定的 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
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    var intNum = await readline();
    if (Number(intNum) == 1) {
        console.log("1");
    } else if (Number(intNum) == 0) {
        console.log("0");
    } else {
        var intNum2 = intNum;
        var arr = [];
        var a = 2;
        var conunt = 0;
        while (intNum2 >= 1) {
            if (Number(intNum2) > 1) {
                a = intNum2 % 2; //获取每次的余数
                intNum2 = Math.floor(intNum2 / 2); //每次的向下取整
                if (a == 1) {
                    conunt++;
                }
            } else {
                a = intNum2;
                intNum2 = Math.floor(intNum2 / 2); //每次的向下取整
                if (a == 1) {
                    conunt++;
                }
            }
            arr.push(a);
        }
        console.log(conunt);
    }
})();


发表于 2024-11-27 22:58:47 回复(0)
方法1:
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
rl.on('line', function (line) {
    const a=parseInt(line).toString(2);//二进制字符串
    let b=0
    for(const i in a){
        if(a[i]==='1'){
           b++
        }
    }
    console.log(b)
});
方法2:
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
rl.on('line', function (line) {
    const tokens = line.split(' ');
    let numbers=0
     geta(tokens)//递归(二进制原理)
    function geta(a){
        let yus=a%2
        if(yus===1){
            numbers++
        }
        const shang=parseInt(a/2)
        if(shang!==0){
            geta(shang)
        }
    }
    console.log(parseInt(numbers));
});

发表于 2021-10-14 22:16:40 回复(0)
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
rl.on('line', function (line) {
   //转成二进制
    const tokens = parseInt(line).toString(2);
    //转成数组
    var list = tokens.split('');
    //循环找出1的个数
    var index = 0;
    list.forEach(item=>{
        if(item=='1'){
            index = index+1;
        }
    })
    //输出
    console.log(index);
});

发表于 2021-09-22 21:27:07 回复(0)
console.log(Number(line).toString(2).match(/1/g).length)
利用num.toString(n)快速进行进制转换
发表于 2021-09-17 21:29:24 回复(0)
const readline = require('readline')

var rl = readline.createInterface({
    input:process.stdin,
    output:process.stdout
})
rl.on('line',(line)=>{
    var num = 0
    var index = -2
    var str = Number(line).toString(2)
    while(index != -1){
        index =  str.indexOf('1',index +1)
        if(index<0){
            
        }else{
            num++
        }
    }
    console.log(num)
})

发表于 2021-09-04 01:02:15 回复(0)
let num;
while(num = readline()) {
    let str = parseInt(num).toString(2).split('0').join('').length;
    console.log(str);
}
编辑于 2021-07-02 15:26:56 回复(0)
let sourceNum = readline()

let res= parseInt(sourceNum, 10).toString(2).split('').filter(item => item == 1).length

console.log(res);

发表于 2021-05-27 18:48:07 回复(0)
let num = readline();
let temp = 0;
while(num){
    if(num%2 !== 0){
        temp++;
    }
    num = num >> 1;
}
print(temp);

发表于 2021-04-15 14:54:32 回复(0)
解法一:
a.将输入转换成二进制,再分割成数组;
b.循环比较数组的每个元素和'1',当存在数组元素是'1'时,个数加1,最终返回个数即可
num = parseInt(readline().trim()); // readline() , 从控制台读取数据
function transForm(num) {
  var num2 = num.toString(2).split("");
  var count = 0;
  for (var i = 0; i < num2.length; i++) {
    if (num2[i] === "1") {
      count++;
    }
  }
  return count;
}
console.log(transForm(num));
解法二:位运算
var num = parseInt(readline().trim()); // readline() , 从控制台读取数据
var count2 = 0;
while (num != 0) { 
  num = num & (num - 1);
  count2++;
}
console.log(count2);

编辑于 2021-02-27 00:39:07 回复(0)
var line = readline();
var erStr = Number(line).toString(2);
var count =0;
for(let i = 0;i<erStr.length;i++){
    if(erStr[i]=='1'){
        count++
    }
}
console.log(count)

发表于 2020-12-09 20:06:14 回复(0)
const int=parseInt(readline());
print(int.toString(2).split("1").length-1)

确保数字然后toString 转换成2进制, 需要找1的个数,就用1 切割成数组,找到数组长度减1
发表于 2020-11-28 11:02:42 回复(0)
while(line=readline()){
    var num = Number(line);
    var str = num.toString(2);
    var arr = str.split("");
    var n=0;
    for(var i=0;i<arr.length;i++){
        if(Number(arr[i])===1){
            n++;
        }
    }
    console.log(n);
}

发表于 2020-11-12 11:22:46 回复(0)
let bin = Number(readline()).toString(2)
let n = 0
for(let char of bin){
  char === '1' && n++
}
console.log(n)


发表于 2020-10-15 15:34:49 回复(0)
JavaScript一行
console.log(parseInt(readline()).toString(2).replace(/0/g,'').length);


发表于 2020-09-11 22:28:28 回复(0)
let n = Number(readline());
let count = 0;
while (n > 0) {
    if ((n & 1) > 0) {
        count++;
    }
    n = n >> 1;
}
console.log(count);

发表于 2020-05-12 21:53:44 回复(0)
var num = parseInt(readline())
var len = num.toString(2).replace(/[^1]/g,'').length;
console.log(len);
发表于 2020-03-29 16:51:28 回复(0)
console.log([...parseInt(readline()).toString(2)].reduce((e,e1)=> Number(e)+Number(e1)))

发表于 2019-12-18 01:15:21 回复(0)
利用与运算符N=N&(N-1),可以很方便解决
发表于 2019-12-10 21:54:46 回复(0)
var num=parseInt(readline());
var arr=num.toString(2).split('');
var t=0;
for(var i=0;i<arr.length;i++){
    if(arr[i]==='1')
        t++;
}
console.log(t)

编辑于 2018-05-30 21:24:27 回复(0)
//将'1'作为分隔符
while(line = readline()){
    var num = parseInt(line.trim());
    var result = num.toString(2).split('1');
    print(result.length-1);
}

发表于 2017-08-29 13:35:03 回复(0)

问题信息

难度:
20条回答 104019浏览

热门推荐

通过挑战的用户

查看代码
求int型正整数在内存中存储时1的个数