不使用内置Javascript函数将基数10转换为其他基数2

不使用内置Javascript函数将基数10转换为其他基数2,javascript,arrays,function,loops,for-loop,Javascript,Arrays,Function,Loops,For Loop,我对编码和javascript还不熟悉,有人要求我在不使用特定javascript内置方法(如alert(a.toString(16))的情况下,将以10为基数的数字转换为二进制基数,我只允许使用循环、数组和函数。这就是我到目前为止所做的: var number = prompt("Enter an unsigned base 10 number"); if (number>=0) { var base = prompt("Enter b for binary, o

我对编码和javascript还不熟悉,有人要求我在不使用特定javascript内置方法(如alert(a.toString(16))的情况下,将以10为基数的数字转换为二进制基数,我只允许使用循环、数组和函数。这就是我到目前为止所做的:

var number = prompt("Enter an unsigned base 10 number");
    if (number>=0) {
        var base = prompt("Enter b for binary, o for octal, or h for hexadecimal");

        if (base=="h"||base=="H") {
            ;
        }
如你所见,我没有太多要说的。我很好奇,我会用什么等式或公式来转换以10为基数的数字,以及我应该如何表示以十六进制为基数的A=10,B=11,C=12等等。任何帮助都将不胜感激

编辑:这是一种相当复杂的方法, 正如Alnitak向我展示的(见下面的讨论)。 这更像是一场拼搏,或者是一条漫长的步行之路

简短解释:

如果我们想得到十进制数10的二进制数, 我们必须尝试
2^n
,以便
2^n
仍然小于10。 例如
2^3=8
(这是可以的)。但是
2^4=16
(太大了)。 因此,我们有
2^3
,并将
1
存储在索引3处的数组中

现在我们必须得到剩下的
10-2^3
,也就是2,并且必须 再次进行同样的计算,直到我们得到零的差值

最后我们必须反转数组,因为它是另一个方向

var a=prompt(“输入一个无符号的基数10”);
var-arr=[];
var i=0;
功能性脱细胞蛋白(x){
y=数学功率(2,i);
if(yx),则为else{
我--;
newX=(x-Math.pow(2,i));
arr[i]=1;
i=0;
德克托宾(纽约)
}else如果(y==x){
arr[i]=1;
结果=arr.reverse().join();
}
返回结果;
}
var b=脱细胞蛋白(a);//var b保存结果

文件。编写(b)是否需要转换为二进制(基于2)或十六进制(基于16)?转换为所有三种,二进制、十六进制和八角形。根据用户选择转换为的基,代码将针对该特定基运行。一旦你发现了这一点,你应该尝试编程。这就是这个网站要做的步骤。提示:用2除后的余数将一个数字转换成二进制;你需要一个循环。余数(模数),在Javascript中是
%
运算符。我不会给你们更多,因为这应该是一个任务,你们应该自己解决。谢谢你们!这确实帮助了看起来不必要的复杂性-我的版本是
函数decToBin(x){return(x?decToBin(Math.floor(x/2)):“”)+(x%2)}
(需要注意的是,这总是添加一个前导零),如果数字限制在0范围内。。2^31-1数学地板(x/2)
可以替换为
x>>1
@Alnitak Thx,以获得您的宝贵建议。你是一个更好的编码员。我仍然学到了很多。但是我尽我所能去帮助别人。实际上我是一名设计师。@Alnitak如果你能解释一下你的代码就好了。我能准确地理解它。二进制字符串是如何存储的?从算法上讲,这只是简单的“最低有效位优先”算法。如果数字是偶数,则输出一个零,否则输出一个1,然后将数字除以2,重复,直到没有剩余。