求较大整数n的阶乘,因为n较大时,n的阶乘超出了正常类型的表示范围,可以采用数组进行操作(c实现)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求较大整数n的阶乘,因为n较大时,n的阶乘超出了正常类型的表示范围,可以采用数组进行操作(c实现)相关的知识,希望对你有一定的参考价值。
下面链接是java的实现,思路叫清晰点http://blog.51cto.com/6631065/2044441
#include <stdio.h> 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<MAX; l++) { temp = a[l] *b[j]; tmpA[l+j]+= temp; } } for(k=0; k<MAX-1; 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<MAX; 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的实现,思路叫清晰点
http://blog.51cto.com/6631065/2044441
以上是关于求较大整数n的阶乘,因为n较大时,n的阶乘超出了正常类型的表示范围,可以采用数组进行操作(c实现)的主要内容,如果未能解决你的问题,请参考以下文章