作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
function addBinary(a, b) {
var num = a + b;
var str = "";
function tryToAdd(x) {
if (str.charAt(x) == 0 || !str || str.charAt(x) == null) {
if (x == str.length) {
str += "1";
} else {
str = str.substr(0, x) + "1" + str.substr(1 + x);
}
} else {
str = str.substr(0, x) + "0" + str.substr(1 + x);
tryToAdd(x + 1);
}
}
for (i = 0; i < num; i++) {
tryToAdd(0);
}
function reverse(s) {
return s.split("").reverse().join("");
} // reverse my string because I don't know why it's reversed in the first place lol
var newStr = reverse(str);
return newStr;
}
console.log(addBinary(1, 5));
这是为一些 codewarrior 的事情而制作的。
我尝试将两个相加的数字转换为二进制(开始时不知道 num.ToString(2)),我成功地做到了......向后。
我在堆栈上找到了一些帮助来反转输出,但当然这感觉不太令人满意。我还从堆栈中获取了替换字符串值的帮助,并尝试修改它们,但是当它们被触及时,事情很快就出问题了。
如果我将 a = 2 和 b = 2(即二进制的 4 和 100)相加,输出将是(没有我的反向函数)001。我只是不明白为什么会在前面的线。我怀疑这是递归函数的问题。
感谢您的帮助!
编辑:抱歉拒绝编辑!我不知道我是怎么做到的,这根本不是故意的。
最佳答案
JavaScript 字符串索引从左到右。例如,"abcd".charAt(1)
是 'b'
。
在 tryToAdd
函数中,您使用 x
作为二进制字符串中要替换的数字的索引。如果您更改定义以通过从字符串长度中减去该索引来反转该索引,那么它将无需反转即可工作:
function addBinary(a,b){
var num = a+b;
var str = "";
function tryToAdd(y){
var x = str.length - y - 1; // correct for left-to-right strings
if (str.charAt(x) == 0 || str.charAt(x) == null) {
str = str.substr(0, x) + "1" + str.substr(1 + x);
}
else {
str = str.substr(0, x) + "0" + str.substr(1 + x);
tryToAdd(y+1); // recur on y, not x
}
}
for (var i = 0; i < num; i++) {
tryToAdd(0);
}
return str;
}
console.log(addBinary(1,5))
请注意,我还摆脱了 x == str.length
条件,因为它似乎没有做任何有用的事情。
我认为您这样做只是为了学习目的,但我仍然想确保您知道可以在 JavaScript 中将数字转换为二进制字符串,如下所示:num.toString(2)
关于javascript - 我的 Javascript 输出是相反的,我不明白为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37416524/
我是一名优秀的程序员,十分优秀!