c语言10000以内阶乘,计算10000以内的阶乘

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

昨天复习了一下数据结构,写了个计算阶乘的程序玩玩,呵呵~!~!

#include&nbsp

#include&nbsp

#define&nbspN&nbsp10000

typedef&nbspstruct&nbspnode

{

&nbsp&nbsp&nbsp&nbsplong&nbspfn;

&nbsp&nbsp&nbsp&nbspstruct&nbspnode&nbsp*next;

&nbsp&nbsp&nbsp&nbspstruct&nbspnode&nbsp*prior;

}NODE;

long&nbspfjiecheng(int&nbspn)&nbsp&nbsp&nbsp&nbsp//用数组实现

{

&nbsp&nbsp&nbsp&nbsp&nbsplong&nbspfn[N]={0};

&nbsp&nbsp&nbsp&nbsp&nbspint&nbspi,j;

&nbsp&nbsp&nbsp&nbsp&nbspfn[0]=fn[1]=1;

&nbsp&nbsp&nbsp&nbsp&nbspfor(i=2;i<=n;i++)

&nbsp&nbsp&nbsp&nbsp&nbsp{

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspfor(j=1;j<=fn[0];j++)

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspfn[j]*=i;

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspfor(j=1;j<=fn[0];j++)

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspif(fn[j]>=10000)

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{&nbsp&nbspfn[j+1]+=fn[j]/10000;&nbsp&nbspfn[j]%=10000;&nbsp&nbsp}

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspif(fn[j]>0)

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspfn[0]++;

&nbsp&nbsp&nbsp&nbsp&nbsp}

&nbsp&nbsp&nbsp&nbsp&nbspfor(i=fn[0];i>0;i--)

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspprintf("%04d",fn[i]);

&nbsp&nbsp&nbsp&nbsp&nbspreturn&nbspfn[0];

}

long&nbspfjiecheng2(int&nbspn)&nbsp&nbsp&nbsp&nbsp//用链表实现

{

&nbsp&nbsp&nbsp&nbspNODE&nbsp*head,*p,*q;

&nbsp&nbsp&nbsp&nbspint&nbspi;

&nbsp&nbsp&nbsp&nbsphead=(NODE&nbsp*)malloc(sizeof(NODE));

&nbsp&nbsp&nbsp&nbspp=(NODE&nbsp*)malloc(sizeof(NODE));

&nbsp&nbsp&nbsp&nbsphead->fn=1;

&nbsp&nbsp&nbsp&nbsphead->next=p;

&nbsp&nbsp&nbsp&nbspp->fn=1;

&nbsp&nbsp&nbsp&nbspp->next=NULL;

&nbsp&nbsp&nbsp&nbspfor(i=2;i<=n;i++)

&nbsp&nbsp&nbsp&nbsp{

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspp=head->next;

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspwhile(p!=NULL)

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{&nbsp&nbspp->fn*=i;&nbsp&nbspp=p->next;&nbsp&nbsp}

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspp=head->next;

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspwhile(p!=NULL)

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{&nbsp&nbspif(p->fn&nbsp>&nbsp10000)

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspif(p->next==NULL)

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{&nbsp&nbsp&nbspq=(NODE&nbsp*)malloc(sizeof(NODE));

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspq->fn=0;

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspq->next=NULL;

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspp->next=q;

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsphead->fn++;

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspp->next->fn+=p->fn/10000;

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspp->fn%=10000;

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspp=p->next;

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}

&nbsp&nbsp&nbsp&nbsp}

&nbsp&nbsp&nbsp&nbspp=head->next;

&nbsp&nbsp&nbsp&nbspp->prior=head;

&nbsp&nbsp&nbsp&nbspq=p->next;

&nbsp&nbsp&nbsp&nbspwhile(q!=NULL)

&nbsp&nbsp&nbsp&nbsp{

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspq->prior=p;

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspp=q;

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspq=q->next;

&nbsp&nbsp&nbsp}

&nbsp&nbsp&nbspwhile(p!=head)

&nbsp&nbsp&nbsp{

&nbsp&nbsp&nbsp&nbsp&nbsp&nbspprintf("%04d",p->fn);

&nbsp&nbsp&nbsp&nbsp&nbsp&nbspp=p->prior;

&nbsp&nbsp&nbsp}

&nbsp&nbsp&nbspreturn&nbsphead->fn;

}

int&nbspmain()

{

&nbsp&nbsp&nbsp&nbsp&nbsp&nbspint&nbspi;

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsplong&nbspk,j;

&nbsp&nbsp&nbsp&nbsp&nbsp&nbspprintf("i=");

&nbsp&nbsp&nbsp&nbsp&nbsp&nbspscanf("%d",&i);

&nbsp&nbsp&nbsp&nbsp&nbsp&nbspprintf("%d!=",i);

&nbsp&nbsp&nbsp&nbsp&nbsp&nbspk=fjiecheng(i);

&nbsp&nbsp&nbsp&nbsp&nbsp&nbspprintf("\n\n\n");

&nbsp&nbsp&nbsp&nbsp&nbsp&nbspprintf("%d!=",i);

&nbsp&nbsp&nbsp&nbsp&nbsp&nbspj=fjiecheng2(i);

&nbsp&nbsp&nbsp&nbsp&nbsp&nbspprintf("\n%ld\n",k);

&nbsp&nbsp&nbsp&nbsp&nbsp&nbspprintf("\n%ld\n",j);

&nbsp&nbsp&nbsp&nbsp&nbsp&nbspprintf("\n\n");

&nbsp&nbsp&nbsp&nbsp&nbsp&nbspsystem("PAUSE");

&nbsp&nbsp&nbsp&nbsp&nbsp&nbspreturn&nbsp0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值