大数的阶乘

来源:互联网 发布:手机双重曝光软件 编辑:程序博客网 时间:2024/05/16 01:22
#include"stdio.h"#define N 10000int a[N]={0};int b[N]={0};int fac(int ,int,int );int main(){int i;int temp,temp1;int n,m;a[0]=1;printf("please input a number:\n");scanf("%d",&n);m=2;temp1=1;fac(n,m,temp1);for(i=N;a[i]==0;i--)temp=i;for(i=temp-1;i>=0;i--)printf("%d",a[i]);return 0;} int fac(int n,int m,int temp2){int i,j,k,temp,temp1,flag;for(i=temp2+10;a[i]==0;i--)temp=i;for(i=0;i<temp || flag==1;i++){flag=0;temp1=a[i]*m;if((b[i]+temp1%10)>9){b[i+1]=b[i+1]+(b[i]+temp1%10)/10;}a[i]=(b[i]+temp1%10)%10;if(temp1>9)  //对进位数组进行分析{for(j=i;temp1>0;j++){temp1=temp1/10;b[j+1]=b[j+1]+temp1%10;}for(k=i+1;k<=j+1;k++) //对进位的进位进行处理{b[k+1]=b[k+1]+b[k]/10;b[k]=b[k]%10;}}for(j=2*temp2;b[j]==0;j--); //判断进位数组剩下的进位数是否为零if(j>i){flag=1;}}temp2=i;for(i=0;i<=j;i++)b[i]=0;if(m<n)return fac(n,++m,temp2);return 0;}

0 0