在JavaScript中查找整数的二进制表示中最长的零序列?
Posted
技术标签:
【中文标题】在JavaScript中查找整数的二进制表示中最长的零序列?【英文标题】:Find longest sequence of zeros in binary representation of an integer in JavaScript? 【发布时间】:2022-01-16 08:55:31 【问题描述】:-
在这个问题中,我必须在整数的二进制表示中找到最长的零序列。
经过大量努力,我能够用我多次更改的逻辑找到最长的零序列。
我的逻辑有一个问题,如果我输入一个没有间隙的整数,我必须给我一个答案 0,我试图自己做出但我失败了。
现在,如果我输入一个没有间隙的整数,它会给我输出无穷大。
当整数的二进制表示中没有间隙时,我希望我的答案打印 0。
var dn = prompt("Enter a number: ");
var bn = new Array();
var i = 0;
var binary = [];
while (dn != 0)
bn[i] = dn % 2;
dn = Math.floor(dn / 2);
i++;
for (var j = i - 1; j >= 0; j--)
binary.push(bn[j]);
console.log(binary.join(""));
var currentGap = 0;
var gaps = [];
var len = binary.length;
for (var k = 0; k < len; k++)
if (binary[k] == 0)
currentGap++;
if (binary[k + 1] == 1)
gaps.push(currentGap);
currentGap = 0;
console.log(Math.max(...gaps));
【问题讨论】:
那么if (gaps.length) console.log(Math.max(...gaps)) else console.log(0)
?
【参考方案1】:
您可以使用 0 添加初始化间隙,或者在间隙保持为空时添加条件以打印 0 否则最大间隙。
var dn = prompt("Enter a number: ");
var bn = new Array();
var i = 0;
var binary = [];
while (dn != 0)
bn[i] = dn % 2;
dn = Math.floor(dn / 2);
i++;
for (var j = i - 1; j >= 0; j--)
binary.push(bn[j]);
console.log(binary.join(""));
var currentGap = 0;
//var gaps = []
var gaps = [0];
var len = binary.length;
for (var k = 0; k < len; k++)
if (binary[k] == 0)
currentGap++;
if (binary[k + 1] == 1)
gaps.push(currentGap);
currentGap = 0;
//if (gaps.length === 0)
// console.log(0)
//else
// console.log(Math.max(...gaps));
console.log(Math.max(...gaps));
【讨论】:
那是评论,不是答案 如何让它成为答案? 你写了这个作为答案。但这不是一个有效的答案(意思是,不是带有代码和问题解决方案的完整答案)。这只是一个提示。简单的提示应该放在 cmets 中。 @JeremyThille 实际上,它 是 一个答案,因为它解决了 OP 的问题。是的,解决方案可能很简单,但这是个问题。 aaa 对不起,我没有得到你的观点@Tomᚊturm 你可以复制我的代码然后编辑它然后发布它并用它写下你的观点【参考方案2】:如果您的 gaps 数组没有长度,您可以简单地打印 0
。
var dn = prompt("Enter a number: ");
var bn = new Array();
var i = 0;
var binary = [];
while (dn != 0)
bn[i] = dn % 2;
dn = Math.floor(dn / 2);
i++;
for (var j = i - 1; j >= 0; j--)
binary.push(bn[j]);
console.log(binary.join(""));
var currentGap = 0;
var gaps = [];
var len = binary.length;
for (var k = 0; k < len; k++)
if (binary[k] == 0)
currentGap++;
if (binary[k + 1] == 1)
gaps.push(currentGap);
currentGap = 0;
console.log(gaps.length ? Math.max(...gaps) : 0); // <-- This
【讨论】:
谢谢,@jeremythille,对不起,我只是一个自学成才的初学者,所以我很难理解别人的提示 感谢@jeremythille 帮助我【参考方案3】:如果我误解了您的问题,我深表歉意,但这能解决您的问题吗?
const s = prompt("Enter a number:");
const longest = Math.max(...parseInt(s).toString(2).split('1').map(s=>s.length));
console.log(longest);
【讨论】:
不,没关系,感谢您的回答,但现在作为初学者,我不允许使用许多内置方法@skara9【参考方案4】:只需更改var gaps = [];
给var gaps = [0];
你也可以这样做...
let dn = parseInt(prompt("Enter a number: "))
if (isNaN(dn)) console.log('Not a Number!')
else
let
dnStr = dn.toString(2) // binary convertion
, count = 0
, zVal = '0'
;
while (dnStr.includes(zVal) )
count++
zVal += '0'
console.log( `$dnStr\n--> $count` )
如果您想自己进行二进制转换,最好使用 javascript 二进制运算符:
let dn = parseInt(prompt("Enter a number: "))
if (isNaN(dn)) console.log('Not a Number!')
else
let gap = [0]
let Bin = []
let count = 0
for (;;)
Bin.unshift( dn & 1 ) // --> dn % 2
if (dn & 1)
gap.push(count)
count = 0
else count++
dn >>>=1 // --> dn = Math.floor(dn / 2)
if (!dn) break // --> if (dn === 0 )
console.log(Bin.join(''))
console.log(Math.max(...gap))
【讨论】:
感谢@misterjojo以上是关于在JavaScript中查找整数的二进制表示中最长的零序列?的主要内容,如果未能解决你的问题,请参考以下文章
如何在JavaScript中将数字的二进制表示从字符串转换为整数?