这段代码应该包含一个字符串(“100101”)并输出十进制的结果。我不太清楚为什么它不起作用。任何帮助都将不胜感激。
before
这是我在下面的更新代码。对于输入“011”,它应该(2 ^ 2 * 0 + 2 ^ 1 * 1 + 2 ^ 0 * 1)到= 3但它返回14.任何人都知道我在哪里我错了?
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;
};
答案 0 :(得分:1)
两个嵌套的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循环
答案 1 :(得分:1)
如果由于某种原因(例如,因为作业问题说不能)而不希望parseInt()
这样做,那么你可以做到这一点,而不需要调用{{1}的复杂性和费用}对于每个数字:
Math.pow()
这不会检查无效的输入字符串。
答案 2 :(得分:0)
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" />
答案 3 :(得分:0)
这是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;
}