首页 > 试题广场 >

查找输入整数二进制中1的个数

[编程题]查找输入整数二进制中1的个数
  • 热度指数:164020 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}对于给定的整数 nm,分别求解他们在二进制表示下的 1 的个数。

输入描述:
\hspace{15pt}第一行输入一个整数 n\left(0 \leqq n \lt 2^{31}\right) 代表需要求解的第一个数字。
\hspace{15pt}第二行输入一个整数 m\left(0 \leqq m \lt 2^{31}\right) 代表需要求解的第二个数字。


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

输入

5
0

输出

2
0

说明

\hspace{15pt}十进制 05 的二进制表示如下:
\hspace{23pt}\bullet\,十进制 (0)_{10} 等于二进制 (0)_{2}
\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{15pt}本题数据已进行规范,不再需要读入至文件结尾(2025/01/09)。
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
rl.on('line', function (line) {
    const num = parseInt(line)
    const t = num.toString(2)
    console.log(t.replace(/0/g, '').length)
});

发表于 2022-06-08 21:10:27 回复(0)
const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
})
rl.on('line',(line)=>{
    let num = new Number(line)
    line = num.toString(2)
    var n = 0
    for(var i = 0;i<line.length;i++){
        if(line.charAt(i)==='1'){
            n++
        }
    }
    console.log(n)
})

发表于 2021-09-04 15:05:36 回复(0)
var line='';
while(line = readline()){
    const n = Number(line).toString(2);
    const  arr = n.toString().split('');
    let i = 0;
    arr.forEach(item=>{
        if(item === '1'){
            i++;
        }
    });
    console.log(i);
}

发表于 2021-06-20 17:05:26 回复(0)
function getNumOfOne (n) {
  let res = parseInt(n, 10).toString(2).split('0').join('').length
  return res
}
while(res = readline()){
    console.log(getNumOfOne(res))
}

发表于 2021-05-31 17:26:07 回复(0)
解法一:位运算
 
function transForm1(num) {
    var count1 = 0;
    while (num != 0) { 
        num = num & (num - 1);
        count1++;
    }
    return count1;
}
while (num = parseInt(readline())) {
    console.log(transForm1(num));
}
解法二:
a.将输入转换成二进制,再分割成数组;
b.循环比较数组的每个元素和'1',当存在数组元素是'1'时,个数加1,最终返回个数即可

 
function transForm1(num) {
    var num2 = num.toString(2).split("");
    var count1 = 0;
    for (var i = 0; i < num2.length; i++) {
      if (num2[i] === "1") {
        count1++;
      }
    }
    return count1;
  }
while (num = parseInt(readline())) {
    console.log(transForm1(num));
}


编辑于 2021-02-27 00:04:56 回复(0)
while(num=readline()){
    let n=parseInt(num).toString(2)
    let res=n.match(/1/g).length
    console.log(res)
}
发表于 2020-07-03 10:23:12 回复(0)
while (line = readline()) {
    let input = parseInt(line.trim());
    let binary = input.toString(2).split('');
    let count = 0;
    
    binary.forEach(ele => {
        if (ele === '1') {
            count ++;
        };
    });
    
    console.log(count);
};

发表于 2020-06-15 16:36:27 回复(0)

while(line=readline()) {
    // 将输入先转为二进制,正则匹配1的个数
    numOf1 = parseInt(line).toString(2).match(/1/g).length;
    print(numOf1);
}
发表于 2020-02-17 17:57:28 回复(0)