首页 > 编程知识 正文

如何求阶乘c语言,c语言能不能计算100的阶乘

时间:2023-05-06 10:10:11 阅读:211887 作者:4120

我又改了一下,还是不行,结果为0了.怎么回事啊?

#include

#include

void gewei(int *p,int k); /*声明对个位数的相乘的函数*/

void shiwei(int *p,int j); /*声明对十位数的相乘的函数*/

void baiwei(int *p,int i); /*声明对百位数的相乘的函数*/

void jingwei(int *p,int m); /*当相乘的积大于10需要进位时,调用此函数完成进位功能*/

main()

{

int arr[1000]={0,0}; /*定义一个数组,存放结果的每一位数*/

int dyxh,i,j,k;

int e,f,g;

FILE *fp_new;

arr[996]=1; /*将千位数初始化为1*/

for(dyxh=0;dyxh<1000;dyxh++) /*通过三重for循环打印出 arr[1000]的初值。*/

{

printf("%d",arr[dyxh]);

}

printf("an以上输出了arr[1000]的初值!大小为0…01000n即将执行1000的阶乘!n按任意键继续!n");

getchar(); /*程序执行到这里暂停,便于查看分析程序*/

for(i=0;i<10;i++) /*百位上的数从0到9*/

for(j=0;j<10;j++) /*十位上的数从0到9*/

for(k=1;k<10;k++) /*个位上的数从0到9*/

{

for(e=1;e<1000;e++)

{

gewei(&arr[1000-e],k); /*对个位数的相乘的函数*/

}

for(f=2;f<1000;f++)

{

shiwei(&arr[1000-f],j); /*用j乘以十位数并通过进位函数完成进位*/

}

for(g=3;g<1000;g++)

{

baiwei(&arr[1000-g],i); /*用i乘以百位数并通过进位函数完成进位*/

}

}

printf("n阶乘运算结束!n按任意键输出arr[1000]的新值!n");

getchar();

for(dyxh=0;dyxh<1000;dyxh++)

{

printf("%d",arr[dyxh]);

}

printf("n输出结束!n");

getchar();

}

void gewei(int *p,int k) /*个位处理函数*****p为arr[999](个位)的地址******k为当前数的个位数*/

{

int m;

m=*p*k;

if(m>9)

{

jingwei(p, m);

return;

}

else

*p=m;

}

void shiwei(int *p,int j) /*十位处理函数****p为arr[998](十位)的地址******k为当前数的十位数*/

{

int m;

m=*p*j;

if(m>9)

{

jingwei(p, m);

return;

}

else

*p=m;

}

void baiwei(int *p,int i) /*百位处理函数****p为arr[997](百位)的地址******k为当前数的个位数*/

{

int m;

m=*p*i;

if(m>9)

{

jingwei(p, m);

}

else

*p=m;

}

void jingwei(int *p,int m) /*进位处理函数******用递归调用完成进位功能*/

{

int a,b,c;

int *pjw;

pjw=p;

a=m%10; /*取得操作位的数*/ /* 进位操作 */

b=m/10; /*取得操作位的上一位的数*/

*pjw=a; /*将操作位上的数填入*/

--pjw; /*移动指针到前一地址*/

c=b+*pjw;

if (c>9)

{

jingwei(pjw,c);

}

else

*pjw=c;

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。