函数在不使用parseInt的情况下求和以2为基数的数字的值
Function to sum the values of base-2 numbers without using parseInt
我正在尝试计算基数为2的数字的和。有没有一种方法可以在不使用parseInt的情况下做到这一点?
function calculate(num1, num2) {
var a = parseInt(num1, 2);
var b = parseInt(num2, 2);
return a + b;
}
calculate('101', '10')
//Returns 7
参见小提琴:http://jsfiddle.net/marcusdei/ko1wuq2u/1/
function calculate(num1) {
var j=num1.length;
var arr=num1.split('');
var num=0;
for(var n=0;n<arr.length;n++)
{
if(j>=0)
{
num=num+(Math.pow(2,n)*arr[j-1]);
j=j-1;
}
}
alert(num);
}
这应该有效,我还没有完全测试过。但应该有效!
编辑:
这现在直接将2个数字相加,它也应该起作用。
var d=calculate('11','101');
alert(d);
function calculate(num1,num2) {
var h=((num1.length>num2.length)?num2:num1);
var h2=((num1.length>num2.length)?num1.length:num1.length);
var secondnum;
if(h==num2)
secondnum=num1;
else
secondnum=num2;
for(var x=0;x<=(h2-h.length);x++)
{
h='0'+h;
}
var arr1=h.split('');
var arr2=secondnum.split('');
var j=arr1.length;
var sum1=0;
for(var n=0;n<arr1.length;n++)
{
if(j>0)
{
sum1=sum1+(Math.pow(2,n)*parseInt(arr1[j-1]));
sum1=sum1+(Math.pow(2,n)*parseInt(arr2[j-1]));
j=j-1;
}
}
return sum1;
}
首先需要定义一个逐位数学函数,然后定义自己的转换函数。带注释的示例:
function binaryAdd(a, b) {
// Break each string down into "bits"
var aBits = a.split('').reverse(),
bBits = b.split('').reverse();
// Pad the shorter value with zeroes
while (aBits.length < bBits.length) {
aBits.push('0');
}
while (bBits.length < bBits.length) {
bBits.push('0');
}
// Add
var carry = false,
out = [];
// For each bit
for (var i = 0; i < aBits.length; ++i) {
var s = 0 + (aBits[i] === '1') + (bBits[i] === '1') + carry;
// This acts much as a lookup table:
// 0 and 2 should print zeroes, 2 and 3 should carry to the next bit
out.push('' + s % 2);
carry = s > 1;
}
if (carry) {
out.push('1');
}
// Flip and join
return out.reverse().join('');
}
function parseBinary(n) {
// Get the bits
var nBits = n.split('').reverse();
// Sum using the value of each position
var sum = 0;
for (var i = 0; i < nBits.length; ++i) {
sum += nBits[i] * Math.pow(2, i);
}
return sum;
}
function showMath(a, b) {
var c = binaryAdd(a, b);
return '' + a + ' + ' + b + ' = ' + c + ' (' + parseBinary(c) + ')';
}
document.getElementById('a').textContent = showMath('101', '10');
document.getElementById('b').textContent = showMath('10111', '1011');
<pre id=a></pre>
<pre id=b></pre>
相关文章:
- 在 Javascript 不起作用的情况下为数字添加逗号
- 在没有内置 Javascript 函数的情况下将基数 10 转换为其他基数 2 的数字
- 在没有科学记数法的情况下将大数字转换为字符串
- 有没有办法在不使用表单的情况下计算数字并在HTML5中显示结果
- JavaScript:在不影响结果准确性的情况下舍入数字
- 在不使用排序的情况下查找数组中的第 n 个最大数字
- 有没有办法在不使用循环的情况下更新多个文档以将特定数字添加到一列
- 在给定一组 6 位数字的情况下查找每个可能的“非重复”组合
- 我如何让这个 JavaScript 数字猜谜游戏在没有“while”或“for”循环的情况下工作
- "最大长度“;在输入类型=“0”的情况下不工作;数字“;在html文本框中
- 使用javascript中的常规exp验证数字,但在一种情况下不起作用
- 如何在不切换的情况下计算正确的数字
- 有没有办法打开'字母数字'默认情况下带有数字的键盘
- 如何在没有页面提交的情况下使用Codeigniter从输入框中获得两个数字的差值
- 在不使用全局作用域的情况下,单击将数字推送到Array
- 如何在不应用四舍五入的情况下将数字固定为两个小数点
- 如何在没有RegExp的情况下为数字添加逗号
- 函数在不使用parseInt的情况下求和以2为基数的数字的值
- 如何在不影响字符串中2位数字的情况下替换字符串中的个位数
- 如何在不事先知道字符串中所有数字的具体位置的情况下,将货币或十进制格式应用于字符串中的所有数字