目录
1,题目
2,代码
2.1转换进制数
2.2模拟加法
3,学习与总结
Math.floor()
模拟加法思路回顾
重点复习巩固 模拟加法的思路和学习位运算;
今天没精力了,先休息
1,题目
给你两个二进制字符串 a
和 b
,以二进制字符串的形式返回它们的和。
2,代码
2.1转换进制数
`0b${a}`
:这是一个模板字符串,用于构建字符串字面量。在这里,0b
是一个前缀,指示随后的数字是二进制格式的。${a}
是模板字符串中的插值表达式,它会被变量a
的值替换。假设a
的值是"1010"
,那么表达式`0b${a}`
的结果将是字符串"0b1010"
。BigInt(...)
:BigInt
函数接受一个字符串或数字参数,并返回相应的大整数(BigInt
)值。当给定的字符串以0b
、0o
或0x
为前缀时,分别表示该字符串是二进制、八进制或十六进制数,BigInt
函数会相应地解析这些字符串为大整数。因此,当你执行
BigInt(`0b${a}`
)
时,JavaScript首先计算模板字符串`0b${a}`
,得到一个形如"0b1010"
的字符串,表示二进制数。然后,BigInt
函数将这个字符串解析为一个BigInt
类型的大整数值。这种方法允许你从二进制字符串直接创建一个
BigInt
值,而不需要先将字符串转换为十进制数。这在处理大型二进制数据时特别有用,因为它避免了数值的范围限制和精度问题。
toString(2)
是一个非常有用的方法,用于将数字转换成其二进制字符串表示形式。这里的2
是.toString()
方法的参数,指定了转换的基数(radix),在这种情况下是二进制(base-2)。基数可以是介于2到36之间的任何整数,允许你将数字转换为不同的数制表示,例如十进制、十六进制等。
/**
* @param {string} a
* @param {string} b
* @return {string}
*/
var addBinary = function(a, b) {
const num1 = BigInt(`0b${a}`);
const num2 = BigInt(`0b${b}`);
return (num1 + num2).toString(2);
};
2.2模拟加法
Math.floor()
将一个指定的数值向下取整到最接近的整数。这意味着Math.floor()
会返回小于或等于给定参数的最大整数。
/**
* @param {string} a
* @param {string} b
* @return {string}
*/
var addBinary = function(a, b) {
let ans = [];
let n = Math.max(a.length,b.length);
// 记录上一位的进位数值
let carry = 0;
for(let i = 0;i<n;i++){
// 先反转这个代表二进制数字的字符串
// 从而低下标对应低位,高下标对应高位。
carry += i < a.length ? parseInt(a.charAt(a.length-1-i)) : 0;
carry += i < b.length ? parseInt(b.charAt(b.length-1-i)) : 0;
ans.push(carry % 2);
carry = Math.floor(carry/2);
}
if(carry > 0){
ans.push(1);
}
// 将数组进行翻转 并将数组转换为字符串
return ans.reverse().join('');
};
3,学习与总结
Math.floor()
console.log(Math.floor(5.95)); // 输出: 5
console.log(Math.floor(5.05)); // 输出: 5
console.log(Math.floor(5)); // 输出: 5
console.log(Math.floor(-5.05)); // 输出: -6
模拟加法思路回顾
思考点:让各个位置对齐,可以先反转这个代表二进制数字的字符串,则 数组底下标对应低位数,数组高下标对应高位数;
核心代码:
carry += i < a.length ? parseInt(a.charAt(a.length-1-i)) : 0;
carry += i < b.length ? parseInt(b.charAt(b.length-1-i)) : 0;
ans.push(carry % 2);
carry = Math.floor(carry/2);
记当前位置对其的两个位为 ai和 bi,
则 每一位的答案为 (carry+ai+bi) mod 2,下一位的进位为 ⌊(carry+ai+bi)/2 ⌋。
作者:力扣官方题解