c++大数阶乘

来源:互联网 发布:淘宝号可以注销吗 编辑:程序博客网 时间:2024/06/05 16:47

    这是我看了一篇别人写的,也忘记是谁写的了,今天复习一下,希望看的人不要说我抄袭什么的,看别人的算法,会了就是自己的了,毕竟我们没有创造新的算法的水平,要说抄袭的话,网上没有什么文章是自创的!

#include<iostream>
#include<cstring>
using namespace std;
int main(){
int jc[10000];
memset(jc,0,sizeof(jc));//大家要养成给变量初试化的好习惯 
//存放阶乘的数组,我们数组开的大些。 
//比如jc[0]代表各位,jc[1]代表十位以此类推 
int i=0;
cin>>i;
jc[0]=1;
//你要求解的是多少的阶乘
for(int j=1;j<=i;j++)

//这个j代表你n!中的1*2*3*···*n
int c=0;//代表你乘法的进位(人工计算的时候不是有进位的吗!)
for(int k=0;k<10000;k++) 
{
//遍历每一位,因为都已经初始化0了,为了保险我们把所有的“位”都遍历一遍
int s=jc[k]*j+c;
//每一位都乘上要求的最新的一个数j
//大家可以拿出笔手工算算,这里就是相同的情况
jc[k]=s%10;
c=s/10; 
}

//我们输出是从最高位输出的,而不是最第低位开始的 
for(i=10000;i>=0;i--)
{
if(jc[i]!=0)
{
break;
}
}
for(;i>=0;i--)
{
cout<<jc[i];
}

}

原创粉丝点击