Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.11 KB | None | 0 0
  1. /**
  2. * var big1 = new BigNum('234234234234234');
  3. * var big2 = new BigNum('234234234234234');
  4. * big1.multiplyBy(big2).toString(); // will output "54865676487297999188377566756" instead of 5.4865676487298e+28
  5. */
  6.  
  7. var BigNum = function(num) {
  8. if (typeof num === 'string') {
  9. this.parts = [];
  10. while (num.length) {
  11. this.parts.push(parseInt(num.slice(-5),10));
  12. num = num.substring(0,num.length-5)
  13. }
  14. } else {
  15. this.parts = num;
  16. }
  17.  
  18. }
  19.  
  20. BigNum.prototype.multiplyBy = function(bigNum) {
  21. var newParts = [];
  22. for (var i = 0, l1 = this.parts.length; i < l1; ++i) {
  23. for (var j = 0, l2 = bigNum.parts.length; j < l2; ++j) {
  24. var newPartIndex = i + j;
  25. newParts[newPartIndex] = this.parts[i] * bigNum.parts[j] + (newParts[newPartIndex] || 0);
  26. }
  27. }
  28. this._fixOverflows(newParts);
  29. return new BigNum(newParts);
  30. };
  31.  
  32. BigNum.prototype.add = function(bigNum) {
  33. var newParts = [];
  34. var length = Math.max(this.parts.length, bigNum.parts.length);
  35. for (var i = 0; i < length; ++i) {
  36. newParts[i] = (this.parts[i] || 0) + (bigNum.parts[i] || 0);
  37. }
  38. this._fixOverflows(newParts);
  39. return new BigNum(newParts);
  40. }
  41.  
  42. BigNum.prototype._fixOverflows = function(parts) {
  43. for (var k = 0; k < parts.length; ++k) {
  44. var currentPart = parts[k].toString();
  45. if (currentPart.length > 5) {
  46. var overflowLength = currentPart.length - 5;
  47. var overflow = parseInt(currentPart.substr(0, overflowLength), 10);
  48. parts[k] = parseInt(currentPart.substr(overflowLength), 10)
  49. parts[k + 1] = overflow + (parts[k + 1] || 0);
  50. }
  51. }
  52. }
  53.  
  54. BigNum.prototype.toString = function() {
  55. var fullNumber = this.parts.map(function(num) {
  56. num = num.toString();
  57. paddingAmount = 5 - num.length;
  58. for (var i = 0; i < paddingAmount; ++i) {
  59. num = '0' + num;
  60. }
  61. return num
  62. }).reverse().join('');
  63. while( fullNumber.charAt(0) === '0' && fullNumber.length !== 1) {
  64. fullNumber = fullNumber.substring(1);
  65. }
  66. return fullNumber;
  67. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement