如何用C语言求10000的阶乘

三不粘2023-04-29  31

#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的阶乘等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

转载请注明原文地址:https://juke.outofmemory.cn/read/3730326.html

最新回复(0)