一千萬個為什麽

搜索

用於計算大因子的商的C ++程序


如何編寫c ++程序來計算大因子。

例如,如果我想計算(100!)/(99!),我們知道答案是100,但如果我分別計算分子和分母的階乘,那麽這兩個數字都是巨大的。

最佳答案

expanding on Dirk's answer (which imo is the correct one):


#include "math.h"
#include "stdio.h"
int main(){
  printf("%lf\n", (100.0/99.0) * exp(lgamma(100)-lgamma(99)) );
}

嘗試它,它真的做你想要的,即使它看起來有點瘋狂,如果你不熟悉它。使用bigint庫將會非常低效。以gammas的日誌為例非常快。這會立即運行。

你需要乘以100/99的原因是伽馬相當於n-1!不是!所以是的,你可以做exp(lgamma(101)-lgamma(100))而不是。此外,伽瑪的定義不僅僅是整數。

轉載註明原文: 用於計算大因子的商的C ++程序

猜你喜歡