C++大数的阶乘怎么算

 我来答
捐你妹8
2015-07-07 · TA获得超过638个赞
知道小有建树答主
回答量:351
采纳率:0%
帮助的人:369万
展开全部
这个问题包含的好多啊……包含了大数的表示/乘法/加法。
首先说表示,
可以考虑简单点的字符表示法,就是每个数字当作一个字符来表示,这样做的好处是简单,直接。缺点是浪费了很多内存。
另一种方式就是用一个类型的极值开根号后的最大的一个整数,比如可以考虑用10000进制。这种方式比上一种就好很多了。
还有就是直接用开根号之后的2进制整值,比如int型是2的32次方,那就用2的16次方。这种效率最高,但是比较麻烦。怎么选择看你了。
第二个说加法,这个是乘法的基础。
加法使用比较直观的长加法,就是小学的时候写加法算式的时候用的竖式。仅仅要注意的是,可能两个数字的长度是不一致的,在加法运算的最后要将另一个数字没有被加过的数值移到和里去。
第三个说乘法,与加法类似,也是用长乘法。
这个其实是一个乘数与另一个乘数的每一位一一相乘,然后将结果加起来。
好了,上面是基本情况。接下来再做阶乘就简单了。基本上和普通的阶乘没什么区别,递归一下就行,差别仅仅是类型修改为上面自定义的类型就可以了。
query999
推荐于2017-10-01 · 超过58用户采纳过TA的回答
知道小有建树答主
回答量:139
采纳率:100%
帮助的人:106万
展开全部

1000000的阶乘也很快

#include <iostream>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
if(n==0 || n==1)
cout<<1<<endl;
else
{
int a[10000]={0},i,j,sum,t,k,q;
a[0]=1;
k=1;
for(i=2;i<=n;i++)
{
sum=0;
for(j=0;j<k;j++)
{
t=a[j]*i+sum;
a[j]=t%10;
sum=t/10;

}
while(sum)
{
a[k++]=sum%10;
sum/=10;
}
}
for(q=k-1;q>=0;q--)
cout<<a[q];
cout<<endl;

}
}

return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
嬅哉C3
高粉答主

2021-02-25 · 关注我不会让你失望
知道答主
回答量:9.7万
采纳率:6%
帮助的人:4864万
展开全部

一分钟了解阶乘

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式