C语言阶乘较大n错误,求较大整数n的阶乘,因为n较大时,n的阶乘超出了正常类型的表示范围,可以采用数组进行操作(c实现)...

下面链接是java的实现,思路叫清晰点

https://blog.51cto.com/6631065/2044441#include 

void Print_Factorial ( const int N );

int main() {

int N;

scanf("%d", &N);

Print_Factorial(N);

return 0;

}

void Print_Factorial(const int N) {

#define MAX 5000

int a[MAX]= {0},tmpA[MAX]= {0},b[4]= {0};

int k,i,flag,j,temp,bit,l;

int f1=0,f2=0,f3=0;

/* 如果小于0大于1000直接返回输入错误*/

if(N <0 || N >1000) {

printf("Invalid input\n");

return;

}

/*等于0输出1*/

else if(N == 0) {

printf("%d\n",1);

return ;

}

/*大于0小于1000*/

else {

/*将数组a的第一位赋值为1,其余赋值为零*/

a[0] =1;

for(i=1; i<=N; i++) {

b[0]=b[1]=b[2]=b[3]=0;

flag =i;

/*将N的各位数进行分解,放入数组b中*/

k=0;

while(flag > 0 && k<4) {

b[k] = flag %10;

flag = flag /10;

k++;

}

temp =0;

bit =0;

for(j=0; j<4; j++) {

/*使用tmpA存储的数值与b数组相乘,结果存到a数组中*/

for(l=0; l

temp = a[l] *b[j];

tmpA[l+j]+= temp;

}

}

for(k=0; k

if(tmpA[k]>=10) {

temp = tmpA[k];

tmpA[k] = tmpA[k] %10;

tmpA[k+1] = tmpA[k+1]+temp/10;

}

}

for(k=0; k

a[k] =tmpA[k];

tmpA[k] =0;

}

}

}

printf("\n");

f3=0;

for(k=MAX-1; k>=0; k--) {

if(a[k] >0) f3=1;

if(f3>0)printf("%d",a[k]);

}

}

下面链接是java的实现,思路叫清晰点

https://blog.51cto.com/6631065/2044441

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值