0

javascript 实现1000阶乘算法

Posted April 22nd, 2010. Filed under JavaScript

<html>
 <head>
 </head>
 <body>
  <div id=”show”></div>
 <script>
  function ride(x, y){
   var re = /(\d{4})/g,
     x1 = x.toString(),
     y1 = y.toString(),
     s  = ”,
     sl = ”,
     ln = 0,
     tl = 0,
     tx = [];
     
   x1 = x1.replace(re, ‘$1,’);
   x1 = x1.replace(/\,$/, ”);
   
   tx = x1.split(‘,’);
   ln = tx[tx.length - 1].length;
   
   
   //分段乘法运算, 转换成整型
   for( var i = 0, l = tx.length; i < l; i++ ){
    tx[i]= tx[i]*y1;
   }

   s  = tx[tx.length - 1].toString();
   if( tx.length > 1 && s.length > ln ){
    tx[tx.length-2] += ( s.substring(0, s.length – ln) * 1); 
    tx[tx.length-1] = s.toString().substring(s.length-ln);
   }

   //进位运算
   for(var i = tx.length – 2; i >0; i–){
    if(tx[i] >= 10000){
     tx[i-1] += Math.floor(tx[i]/10000);
     tx[i]   = tx[i]%10000;
    }
   }

   //补零运算
   for( var i = tx.length – 2; i > 0; i– ){
    if( tx[i] < 1000 ){
     for(var k1 = 0, k2 = 4 – tx[i].toString().length; k1 < k2; k1++ ){
      tx[i] = ‘0′ + tx[i];
     }
    }
   }

   return tx.join(”);
  }

  function lev(n){
   var s = 1, r= ”;

   for( var i =1; i <= n; i++ ){
    s = s.toString().replace(/(0*)$/,”);
    r += RegExp.$1;
    s=ride(s, i);
   }

   s+=r;
   return s;
  }
  
  var t1 = new Date().getTime();
  document.getElementById(’show’).innerHTML = ‘1000阶乘:<br />’ + lev(1000);
  document.getElementById(’show’).innerHTML += ‘<br /><br />总耗时= ‘ + (new Date().getTime() – t1) + ‘ ms’;

 </script>

</body>
</html>

If you have enjoyed this entry. Please feel free to bookmark it using your favorite social bookmarking site

Leave a Comment