两种方法:
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
while ((line = await readline())) {
let str = parseInt(line);
// 第一种方法,用系统库函数
// let toER = str.toString(2);
// console.log(toER.match(/1/g).length);
// 第二种方法,找出规律,递归调用
let res = toER_W(str);
console.log(res);
function toER_W(n) {
if(n==1||n==2){
return 1;
}
if (n % 2 == 0) { // 如果是偶数,那么和它除以2后 再转换成二进制所包含的1的数量一直,比如 22 和 11 转换成二进制后所包含的 1 的数量一致。
return toER_W(n / 2);
} else {
let res = parseInt(n/2); // 千万别忘了parseInt,否则进入死循环
return 1 + toER_W(res);
}
}
}
})();

京公网安备 11010502036488号