0

我试图在不使用的情况下将十进制转换为十六进制转换器Number.prototype.toString(这是一个不允许该功能的分配)。我正在尝试使用递归来尝试工作。如果这有任何意义,一切都可以正常工作,直到else进入 main 内部。else当我对 255 以上的任何数字(即十六进制中超过 2 位的任何数字)运行它时,它会给我这个错误。有谁知道为什么会这样?

var number = parseInt(prompt("Give me a number and I will turn it into hexadecimal!"));
var digit = 1;
var hexConverter = function () {
    if (digit === 1) {
        if (Math.floor(number / 16) === 0) {
            console.log(hexDigits[number]);
        } else {
            digit = 16;
            console.log(hexConverter(), hexDigits[number % 16]);
        }
    } else {
        if (Math.floor(number / (digit * 16)) === 0) {
            return (hexDigits[Math.floor(number / digit)]);
        } else {
            return (hexConverter(), hexDigits[number % (digit * 16)]);
        }
        digit = digit * 16;
    }
};
hexConverter();
4

2 回答 2

0

digit在进行递归调用后正在更改,因此它将停留在 16 并且永远不会达到您增加它的地步。

digit = digit*16;就像digit = 16在第一部分中一样,将to 移到递归调用之前。

于 2013-10-06T23:10:59.877 回答
0
function toHex(x) {
   var res='',h;
   while (x) {
     res=(((h=x&15)<10)? h : String.fromCharCode(55+h)) + res; 
     x>>=4;
   }
   return res;
}

会工作得很好。
向你提问:为什么只有“相当”?:-)

于 2013-10-07T02:58:23.927 回答