#include"stdioh"
#include"stringh"
#include<stdlibh>
int main()
{
char n[10];
int a[20000]={0},b[20000]={0},c[20000]={0},temp;
int i,j,k,len;
printf("请输入阶乘数:");
scanf("%s",&n);
/下面以b为乘数,a为被乘数(依次从1到n递增)/
temp=atoi(n);/化整/
b[0]=1;/初始化b,求阶乘从1开始/
len=1;/初始化b的长度/
for(i=1;i<=temp;i++)/阶乘从低往高乘/
{
sprintf(n,"%d",i);/将阶乘项转换为字符串/
for(j=strlen(n)-1;j>=0;j--)/逆向存储阶乘项(串)/
a[strlen(n)-1-j]=n[j]-'0';/注意要变成整数才能进行相乘/
for(j=0;j<len;j++)/取b的所有位/
for(k=0;k<strlen(n);k++)/取阶乘项的每一位/
{
c[j+k]+=b[j]a[k];/用c来存储每一位相乘的结果/
c[j+1+k]+=c[j+k]/10;/若c[j+k]不小于10,则将大于10的部分送至高位/
c[j+k]%=10;/送至高位后,c[j+k]应作相应的求余运算。只保留剩余部分/ }
if(c[j+k-1]!=0)/判断新的b数的位数长度/
len=j+k;
else
len=j+k-1;
for(j=0;j<len;j++)/将b更新/
b[j]=c[j];
memset(c,0,sizeof(c));/将c归零/
}
for(i=len-1;i>=0;i--)/逆向输出结果/
printf("%d",b[i]);
printf("\n");
return 0;
}
void fact(int n,int jc[])
{ int i,j,s;
int sum[300]={0}; //临时存储计算结果
sum[0]=1;
for(i=1;i<=n;i++)
{ for(j=1;j<300;j++)
sum[j]=ssum[j]i;
for(j=1;j<299;j++) //十进制变换
if(sum[j]>9)
{ sum[j+1]=sum[j+1]+sum[j]/10;
sun[j]=sum[j]%10;
}
}
i=299;
while(sum[i]==0)
{ i--;}
s=i+1;//阶乘的位数
jc[0]=s; //返回计算结果
for(i=1;i<=s;i++)
jc[i]=sum[s-i];
}
//调用示例
main()
{ int n,i,s;
int jc[300]; //定义一个存储用的数组,注意数组元素个数不能过小,否则会溢出
printf("please input the num !");
scanf("%d",&n);
fact(n,jc);
s=jc[0];//取得阶乘位数
printf("%d的阶乘为\n",n);
for(i=s;i>=1;i--) //倒序打印
printf("%d",jc[i]);
}
下构思下程序的基础, 让用户自定义输入一个数作为阶乘数, 当超过20时,输出“Nis too big” 需要用到IF函数,以下为详细过程。 #include<iostream> us
int getFactorial(int data) //求阶乘;bai
{
int resData=1;
for (int i=0;i<data;i++)
{
duresData=i;
}
return resData;
}
扩展资料:
0!=1。
定义的必要性
由于正整数的阶乘是一种连乘运算,而0与任何实数相乘的结果都是0。所以用正整数阶乘的定义是无法推广或推导出0!=1的。即在连乘意义下无法解释“0!=1”。
给“0!”下定义只是为了相关公式的表述及运算更方便。
参考资料来源:百度百科-n!
以上就是关于如何用C语言求10000的阶乘全部的内容,包括:如何用C语言求10000的阶乘、阶乘计算、c语言,输入n,用函数求n的阶乘等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!