二进制转十进制 Javascript

Binary to Decimal Javascript

此代码应该接受一个字符串 ("100101") 并在 decimal.I 中输出结果我不太清楚为什么它不是 working.Any 帮助将不胜感激。

function BinaryConverter(str) { 
 var num=str.split("");
 var powers=[];
 var sum=0;
  for(var i=0;i<num.length;i++){
   powers.push(i);
}
 for(var i=powers.length-1;i>=0;i--){
  for(var j=0;j<num.length;i++){
   sum+=Math.pow(2,i)*num[j];
  }
 }
 return sum;
};

下面是我更新的代码。对于输入“011”,它应该执行(2^2*0 +2^1*1 +2^0*1)到 =3 但它 returns 14.Anybody 知道我哪里错了吗?

    function BinaryConverter(str) { 
     var num=str.split("");
     var powers=[];
     var sum=0;
     for(var i=0;i<num.length;i++){
       powers.push(i);
     }
     for(var i=powers.length-1;i>=0;i--){
      for(var j=0;j<num.length;j++){
       sum+=Math.pow(2,i)*num[j];
      }
     }
     return sum;
    };

两个嵌套的for循环有问题。第一个减去一个 i,而第二个添加一个 i 永远创建一个永无止境的循环。

您的代码也应该是这样的:

    function BinaryConverter(str) { 
        var num=str.split("");
        var powers=[];
        var sum=0;
        var numlength=num.length;

        for(var i=0;i<num.length;i++){
            powers.push(i);
        }

        for(var i=powers.length-1;i>=0;i--){

            sum+=Math.pow(2,i)*num[numlength-i-1];

        }
        return sum;
   };

我认为您不需要嵌套的 for 循环

如果您出于某种原因不想用 parseInt() 这样做(例如,因为家庭作业问题说您不能),您可以这样做而无需调用 [= 的复杂性和费用12=] 每个数字:

function parseBinary(str) {
  var i, value = 0;
  for (i = 0; i < str.length; ++i)
    value = value * 2 + +str[i];
  return value;
}

这不会检查无效的输入字符串。

ace040686只是将他的回答中的pow(2,i)num[len-1-i]倒过来,否则就是正确的。另外,您不必要地将 0..str.length-1 推到 powers,这些是隐式索引。

function convertNaive(str) {
  var num = str.split("");
  var len = num.length;
  var sum = 0;
  for(var i = len - 1; i >= 0; --i)
    sum += Math.pow(2, len - 1 - i) * num[i];
  return sum;
}

你可以稍微改进一下以避免不必要的数组,尤其是 Math.pow:

function convertImproved(str) {
  var len = str.length;
  var sum = 0;
  for(var i = 0, fac = 1; i < len; ++i, fac *= 2)
    sum += fac * str[len - 1 - i];
  return sum;
}

亲自尝试一下:

var input = "100101";
var logNode = document.getElementById("log");

function log(line) {
  var text = document.createTextNode(line);
  var node = document.createElement("p");
  node.appendChild(text);
  logNode.appendChild(node);
}

function convertNaive(str) {
  var num = str.split("");
  var len = num.length;
  var sum = 0;
  for(var i = len - 1; i >= 0; --i)
    sum += Math.pow(2, len - 1 - i) * num[i];
  return sum;
}

function convertImproved(str) {
  var len = str.length;
  var sum = 0;
  for(var i = 0, fac = 1; i < len; ++i, fac *= 2)
    sum += fac * str[len - 1 - i];
  return sum;
}

log("input: " + input);
log("parseInt(input, 2): " + parseInt(input, 2));
log("convertNaive(input): " + convertNaive(input));
log("convertImproved(input): " + convertImproved(input));
<div id="log" />

下面是javascript中二进制转十进制的简单实现。

main();

function main() {
    let binaryInput = 10000100111;
    let decimalOutput = binaryTodecimal(binaryInput);
    console.log(decimalOutput);
}

function binaryTodecimal(input) {
    let inputString = input.toString();
    let result = 0;
    let exponent = 1;
    let currentBit = 0;
    for (let i = inputString.length - 1; i >= 0; i--) {
        currentBit = parseInt(inputString[i]);
        currentBit *= exponent;
        result += currentBit;
        exponent *= 2;
    }
    return result;
}