如何计算给定数字的位数?

我希望用户输入一个数字并打印回该数字的位数。

我知道我可以使用length,但是我的作业要求while循环。

这是我到目前为止所拥有的:

var num;
var count = 0;

num = prompt('Enter number: ');

function counter(x,y) {
  while (x > 0) {
    y++;
    x /= 10;
  }
  return y;
}

var result = counter(num,count);

console.log(result);

当我输入数字3456(例如)时,我会得到数字328。我希望它打印回数字4

baoqiwen123456 回答:如何计算给定数字的位数?

此行:

x /= 10;

应更改为:

x = Math.floor(x / 10);

该逻辑假定整数除法:应该将1234变成123、12、1和0。JavaScript没有内置整数除法,因此您需要使用Math.floor来模拟它。包含一些修复程序的完整示例:

function countDigits(num) {
  var count = 0;
  while (num > 0) {
    num = Math.floor(num / 10);
    count++;
  }
  return count;
}

var num;
do {
  num = Number(prompt("Enter number:"));
} while (Number.isNaN(num));
num = Math.abs(num); // just in case you want to handle -ve numbers
var result = countDigits(num);
console.log(result);

,

问题在于,除法运算最终将把x转换为浮点数,并且您将得到以下内容:

x / 10 === 0.1;
x / 10 === 0.01;
x / 10 === 0.001;
....

如果您总是将除法结果解析(舍入)为整数,则会得到预期的结果。

var num;
var count = 0;

num = prompt('Enter number: ');

function counter(x,y) {
  while (x > 0) {
    y++;
    x = parseInt(x / 10);
  }
  return y;
}

var result = counter(num,count);

console.log(result);

,

首先,您应该将输入转换为数字,最好使用+函数(使用一元5 / 10具有相同的效果)。

第二个类似0.5的除法将返回比0大的1。相反,您应该检查该数字是否大于或等于function counter(num) { num = Math.abs(num) / 10; var count = 1; while (num >= 1) { count++; num /= 10; } return count; } console.log(counter(+prompt('Enter number: ')));

do while

您还可以使用Navigation.findNavController(itemView).navigate( UIFragmentVideoListDirections.aVideoList2Video((aFile.absolutePath)) ) 循环,并避免在循环外进行额外的除法。

,

正如其他人指出的那样,function counter(x) { let y=0; while (x > 0) { console.log("x=" + x + ",y=" + y); y++; x /= 10; } return y; } counter(3456); 不必是参数,它可以是局部变量。但这不是你的问题。让我们在循环中添加一些额外的日志记录:

x=3456,y=0
x=345.6,y=1
x=34.56,y=2
x=3.4560000000000004,y=3
x=0.3456,y=4
x=0.03456,y=5
...

输出看起来像这样:

0.3456

您希望循环在0处停止,但这还不止{{1}}。 (这个错误实际上使您有机会学习更多的东西:您能解释一下循环为什么会完全结束吗?)

希望这能给您足够的提示来完成作业-记住调试是编程的极其重要部分。

,

您可以通过使用十进制计数的幂再次检查数字。

function counter(value) {
    var decimals = 0;
    do {
        decimals++;
    } while (value >= 10 ** decimals)
    return decimals;
}

console.log(counter(0));
console.log(counter(1));
console.log(counter(7));
console.log(counter(42));
console.log(counter(999));
console.log(counter(1000));
console.log(counter(1001));

,

请不要使用循环来测量整数的长度...

改为使用数学!对数将为您做得更好。

function numberLength(number) {
    return Math.floor(Math.log10(Math.abs(number))) + 1
}

console.log(numberLength(YOUR_NUMBER));

当输入为NaN时,此代码返回0。我认为0的长度取决于您的哲学,因此我不理会这种情况。

本文链接:https://www.f2er.com/3124213.html

大家都在问