2010-06-18 7 views

Répondre

1

Ici, vous allez, utilisé ce script quelque part et il semble fonctionner. L'idée derrière cela est qu'il divise la chaîne en morceaux de 8 caractères, et calcule le morceau/2, puis résume les morceaux et obtient un résultat de division de 2.

En divisant par 2 - il calcule facilement le résultat puis.

var maxIntSize = 8; 

function divide2(number, addup, depth) { 
    var result = ""; 

    var partLength = Math.min(number.length,maxIntSize); 
    var part = number.substring(0,partLength); 

    var partNum = parseInt(part,10); 
    var partAdd = (addup==0)?0:(5*Math.pow(10,partLength-1)); 
    var partRes = Math.floor(partNum/2)+partAdd; 
    var partRem = partNum%2; 

    result = result + partRes; 

    if (depth > 0) { 
     for (var i=result.length; i < partLength; i++) { 
      result = "0"+result; 
     } 
    } 

    var nextPart = number.substring(partLength, number.length); 

    if (partLength < number.length) { 
     var res = divide2(nextPart, partRem, depth+1); 
     result = result + res.result; 
     res.result = result; 
     return res; 
    } else { 
     var res = {result: result, remainder: partRem}; 
     return res; 
    } 
} 

function toBinary(number) { 
    var out = ""; 

    while (number.length > 1 || number != "0") { 
     var res = divide2(number,0,0); 
     out = "" + res.remainder + out; 
     number = res.result; 
    } 

    return out; 
} 

var testNum = "12312312312112312312312312312312312312312312312312312312312312312312312312312312312312312312123"; 
document.write("bin("+testNum+") = "+toBinary(""+testNum)+"<br/>"); 

La division en morceaux est nécessaire pour calculer la division de 2 plus rapidement. Ce script fonctionne assez vite même pour des nombres énormes.