二进制到十进制Javascript
Binary to Decimal Javascript
这段代码应该接受一个字符串("100101")并以十进制形式输出结果。我不太确定为什么它不起作用。如有任何帮助,不胜感激。
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,但它返回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;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()
这样做,您可以这样做,而无需为每个数字调用Math.pow()
的复杂性和费用:
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;
}
相关文章:
- 在Javascript和PHP中,十进制到RGB
- 在javascript中接受十进制数字的Regex
- 如何使用javascript验证在表单输入中避免负值、浮点值和十进制值
- JavaScript basis 是 math.pow 函数中的十进制数
- 如何使用 JavaScript 自动设置十进制值
- Javascript - 具有非线性刻度的负十进制输入范围
- 如何使用 javascript 将浮点数格式化为十进制数(7)
- 循环 += 十进制变量的 javascript 有问题
- 有人可以详细解释这个 JavaScript 十进制舍入函数吗?
- Javascript:我怎么能强迫一个有十进制值的字符串使用点而不是逗号呢
- Javascript 十进制计算
- Javascript 十进制到二进制 - 64 位
- Javascript十进制减法
- 节点JavaScript-十进制字符串到整数
- Javascript-十进制格式
- 神秘的2出现在我的JavaScript十进制到二进制转换器的输出中
- Javascript十进制到十六进制
- Javascript十进制(低16位)到十进制
- 简单的javascript十进制加法会产生不正确的结果
- JavaScript十进制数字