我是靠谱客的博主 鳗鱼薯片,最近开发中收集的这篇文章主要介绍C语言数组100000,100000!阶乘,应该可以更大,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

/********************************************************************************

** 文件名: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!阶乘,应该可以更大所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部