您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页100的阶乘

100的阶乘

来源:筏尚旅游网
100的阶乘

阶乘的结果与Gamma函数是一致的:

Gamma函数

C++11内置了计算Gamma函数的std::tgamma和对数版本的std::lgamma:

#include#includeintmain(){intn=100;std::cout<\"<100! = 9.33262e+157 100! = 9.33262e+157

也可以利用斯特林公式计算近似值:

斯特林公式

这个公式在n很小的时候就很逼近准确结果了,且n越大结果越准确。

阶乘、Gamma函数与斯特林公式的比较

#include#include#define PI 3.

intmain(){intn=100;doublek=1+1.0/(12*n)+1.0/(288*std::pow(n,2));// 越完整越精确 std::cout<\"<但上述函数只能取到n不超过170的结果,即最大只能得到170的阶乘。为了防止溢出需要自行设计一个表示数的数据结构,粗略求解可设计成d*10^i的格式: structMyNumber{// 默认值为 1 * 10^0 doubled=1;inti=0;};

在计算过程中可以通过减小d增加i防止溢出,并保持表示的值不变(实际有精度损失):

if(result.d>1e100)// 1e100表示10的100次方,可设定其他值

{result.d/=1e100;result.i+=100;} 实现也很简单:

intmain(){MyNumberresult;intn=100;for(inti=1;i<=n;++i){if(result.d>1e100){result.d/=1e100;result.i+=100;}result.d*=i;}while(result.d>=10){result.d/=10;result.i+=1;}printf_s(\"%d! = %.10f * 10^%d\ 运行结果是:

100! = 9. * 10^157

如果要精确求解,就得把数设计成由各个数位组成的格式,比如12345用一个数组表示为:

将数的低位存储在数组低位,再根据这个格式实现乘法的进位操作:

#include#define MAXSIZE 10000

intmain(){intresult[MAXSIZE];result[0]=1;// 默认值为1 intpos=0;// 结果的最高位索引,默认从0开始

intn=100;for(inti=1;i<=n;++i)// 依次计算i的阶乘

{intcarry=0;// 进位值

for(intj=0;j<=pos;++j)// 依次计算结果的各个数位

{inttmp=result[j]*i+carry;result[j]=tmp%10;// tmp的个位数保留在当前位

carry=tmp/10;// 其他用于进位

}while(carry>0)// 如果还有多余的进位值依次置于高位 {result[++pos]=carry%10;// 增加pos数目后放置高位值 carry/=10;}}std::cout<=0;--i)std::cout<用std::vector替代数组更容易理解,事实上,每个数位的值都不会超过10,完全不需要用int表示,而可以直接使用char:

#include#includeintmain(){std::vectorresult;// 也可以用std::string // result.reserve(10000);

result.emplace_back(1);// 默认值为1

intn=100;for(inti=1;i<=n;++i)// 依次计算i的阶乘 {intcarry=0;// 进位值

for(std::size_tj=0;j{inttmp=result[j]*i+carry;result[j]=tmp%10;carry=tmp/10;// 其他用于进位

}while(carry>0)// 如果还有多余的进位值依次置于高位 {result.emplace_back(carry%10);// 放置高位值 carry/=10;}}std::cout<\";for(autoit=result.crbegin();it!=result.crend();++it){std::cout<(*it);}} 最终结果:

100! =

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务