Non-decimal radices/Convert: Difference between revisions

m (→‎{{header|REXX}}: changed/added comments and whitespace, changed indentations, changed wording in the output section.)
Line 1,299:
Debugging or following the process is easy as it is kept in the expected base string format and order.
<lang javascript>
var baselist = "0123456789abcdefghijklmnopqrstuvwxyz", listbase = [];
for(var i = 0; i < baselist.length; i++) listbase[baselist[i]] = i; // Generate baselist reverse
function basechange(snumber, frombase, tobase)
{
var i, t, to = new Array(Math.ceil(snumber.length * Math.log(frombase) / Math.log(tobase))), accumulator,;
baselist = "0123456789abcdefghijklmnopqrstuvwxyz", listbase = [];
if(1 < frombase < baselist.length || 1 < tobase < baselist.length) console.error("Invalid or unsupported base!");
for(i = 0; i < baselist.length; i++) listbase[baselist[i]] = i; // Generate baselist reverse
while(snumber[0] == baselist[0] && snumber.length > 1) snumber = snumber.substr(1); // Remove leading zeros character
console.log("Number is", snumber, "in base", frombase, "to base", tobase, "result should be", parseInt(snumber, frombase).toString(tobase));
for(i = snumber.length - 1, inexp = 1; i > -1; i--, inexp *= frombase)
for(accumulator = listbase[snumber[i]] * inexp, t = to.length - 1; accumulator > 0 || t >= 0; t--)
Line 1,317:
}
console.log("Result:", basechange("zzzzzzzzzz", 36, 10));</lang>
Using BigInteger, can convert any base.
<lang javascript>
// Tom Wu jsbn.js http://www-cs-students.stanford.edu/~tjw/jsbn/
var baselist = "0123456789abcdefghijklmnopqrstuvwxyz", listbase = [];
for(var i = 0; i < baselist.length; i++) listbase[baselist[i]] = i; // Generate baselist reverse
function baseconvert(snumber, frombase, tobase) // String number in base X to string number in base Y, arbitrary length, base
{
var i, t, to, accum = new BigInteger(), inexp = new BigInteger('1', 10), tb = new BigInteger([tobase]), fb = new BigInteger([frombase]), tmp = new BigInteger();
while(snumber[0] == baselist[0] && snumber.length > 1) snumber = snumber.substr(1); // Remove leading zeros
for(i = snumber.length - 1, to = new Array(Math.ceil(snumber.length * Math.log(frombase) / Math.log(tobase))); i > -1; i--)
{
accum = inexp.clone();
accum.dMultiply(listbase[snumber[i]]);
for(t = to.length - 1; accum.compareTo(BigInteger.ZERO) > 0 || t >= 0; t--)
{
tmp.fromInt(listbase[to[t]] || 0);
accum = accum.add(tmp);
to[t] = baselist[accum.mod(tb).intValue()];
accum = accum.divide(tb);
}
inexp = inexp.multiply(fb);
}
while(to[0] == baselist[0] && to.length > 1) to = to.slice(1); // Remove leading zeros
return to.join('');
bnn}
</lang>
 
=={{header|jq}}==