Node.js输出大数字的格式

时间:2013-01-29 20:16:42

标签: javascript node.js factorial

我正在尝试在node.js上编写因子实现。从非常简单的递归方法到大多数复杂的算法。这是代码:

process.stdin.resume();

var i = 0, t = 0;

process.stdin.on('data', function (n) {
    if (t == 0) {
        t = n;
    } else {
        if (i++ < t) {
            process.stdout.write(Factorial(n).toString());
            if (i == t) {
                process.exit();
            }
        } else {
            process.exit();
        }
    }
});

function Factorial (n) {
    if (n > 1) {
        n *= Factorial(n - 1);
    }
    return n;
}

问题是 - 数字表示。我希望得到准确的答案:

100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

但是我现在收到更合乎逻辑但没用的东西:

100! = 9.33262154439441e+157

我相信阶乘的二元表示是正确的,但我怎么能得到它的“松散”形式呢?

1 个答案:

答案 0 :(得分:2)

你可以使用以下任何一种:

实现一个在其中任何一个上计算阶乘的函数应该非常简单。如果您这样做,则可能需要使用memoization来提高整体性能。这是一个没有大整数支持的基本实现:

var MEMOIZED_FACT = [];

function FACT(number) {
  var n = Math.floor(number);
  if (n === 0 || n === 1) {
    return 1;
  } else if(MEMOIZED_FACT[n] > 0) {
    return MEMOIZED_FACT[n];
  } else {
    return MEMOIZED_FACT = FACT(n - 1) * n;
  }
}