概述
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/********************************************************************************
** 文件名:fac.c
**文件功能:计算大数的阶乘,最大可计算20000.
**文件作者:
**文件日期:
********************************************************************************/
#include
#include
#include
#define N 10000
#define M (sizeof(int)*4)
int factorial(int n,int a[],int size);//计算大数阶乘函数
int printfactor(int k,int a[]);//显示大数阶乘值
int main(int argc,char *argv[])
{
int *pNum;//指向运算的数组空间
int k=0;//存储数组有效位数
int n;//要计算的阶乘数
int m;
//printf("Please input a non-negative number.n");
scanf("%d",&n);
if(n<0) {
printf("input data is error.n");
return -1;
}
pNum=(int *)malloc(n*M);
if(pNum==NULL)
{
printf("Failed to apply for memoryn");
return -1;
}
memset(pNum,0,n*M);
k=factorial(n,pNum,n*M);
if(k==-1) return -1;
m=printfactor(k,pNum);
//printf("nThe valid units:%dn",m);
free(pNum);
pNum=NULL;
return 0;
}
/********************************************************************************
**函数名:factorial(int n,int a[],int size);
**函数功能:函数用大数组模拟人们日常十进制运算过程,计算大数阶乘值,值存入a[]指向
** 的内存空间,使用每个int型空间存储四位十进制数,每位空间最大存储9999.
**函数参数:1.n要计算的阶乘数2.a[]指向运算存储的数组
** 3.size数组的大小
**函数返回:函数返回运算结果数据的有效位数。
**运算式:an,n0,n1均为四位数整数,1式X2式
**|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|
**|--1--|-----|-----|--0--|--a8-|--a7-|--a6-|--a5-|--a4-|--a3-|--a2-|--a1-|--a0-|-----|
**|--2--|--X--|-----|-----|-----|-----|-----|-----|-----|-----|-----|--n1-|--n0-|-----|
**|-----|-----|--0--|--0--|a8.n0|a7.n0|a6.n0|a5.n0|a4.n0|a3.n0|a2.n0|a1.n0|ao.n0|-----|
**|-----|-----|-----|a8.n1|a7.n1|a6.n1|a5.n1|a4.n1|a3.n1|a2.n1|a1.n1|ao.n1|-----|-----|
**
********************************************************************************/
int factorial(int n,int a[],int size)
{
int i,j;
int k,c=0;
int t,t1,t2=0;
int b1,b0;
int head,tail;
if(n<0||a==NULL) return -1;
head=tail=0;
a[0]=1;
for(i=2;i<=n;i++)
{
b1=i/N;
b0=i%N;
while(a[tail]==0)
tail++;
for(j=tail;j<=head;j++)
{
k=a[j];
t1=k*b0;
t=t1%N+t2%N+c;
c=t1/N+t2/N+t/N;
t2=k*b1;
a[j]=t%N;
if(j==head&&(c>0||t2>0))
{
head++;
}
if(head>=size)
{
printf("数组空间不够!n");
return -1;
}
}
}
return head;
}
/********************************************************************************
**函数名:printfactor(int k,int a[]);
**函数功能:函数用大数组模拟人们日常十进制运算过程,计算大数阶乘值,值存入a[]指向
** 的内存空间,使用每个int型空间存储四位十进制数,每位空间最大存储9999.
**函数参数:1.n要计算的阶乘数2.a[]指向运算存储的数组
**
**函数返回:函数返回运算结果数据的有效位数。
********************************************************************************/
int printfactor(int k,int a[])
{
int i;
int m=0;
m=printf("%d",a[k--]);
for(i=k;i>=0;i--)
m+=printf("%.4d",a[i]);
return m;
}
最后
以上就是鳗鱼薯片为你收集整理的C语言数组100000,100000!阶乘,应该可以更大的全部内容,希望文章能够帮你解决C语言数组100000,100000!阶乘,应该可以更大所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复