教程中国
PHOTOSHOP CS9.0中文版 MAYA 8.5 FOR WINDOWS Corel Painter v9.0 Flash MX2004 中文版 Illustrator cs2 中文版
VC++6.0含sp6 中英文版 VB6.0 +sp6 简体中文版 Borland Delphi 7汉化版 MSDN for vb6.0中文版 Visual Studio 2005简体
教程中国下属 文件存储共享专家BIBIDU.COM 提供大型软件,教材,源码,电影,音乐,图书等下载 更多精品请点此进入
  您目前所在位置: 教程中国 >> C >> 编程实例 >> n!的求解 RSS订阅
n!的求解
教程(视频,书籍)下载:  ASP.NET AutoCAD 数据库 C# ASP java photoshop 网页设计 delphi 3dmax Flash C++ VB 张孝祥 实例   更多请进入BIBIDU搜索
IT搜索引擎   

本题采用链表(n<int)占用空间小但在处理大的数时时间较长。望那位高手指点,用较短的时间又处理较大的数。

联系我:许夏,gordon772@yahoo.com.cn 多谢!

程序如下:

#include<sio.h>
#include<malloc.h>
suct number
{ int data;
suct number *next;
}num;
suct number *create(int n) /*从个位到高位循环*/
{ int i=1,t,flag=0;
suct number *head,*r,*p,*s;
head=(suct number *)malloc(sizeof(num)) ;
head->next=NULL;
s=(suct number *)malloc(sizeof(num));
if(head->next==NULL)
{ head->next=s;head->data=0; }
head->next->data=1;
s->next=NULL;
while(i<=n) /*先乘后加*/
{ r=head->next;
while(r!=NULL)
{ t=r->data*=i; flag=0;
if(t>9&&r->next==NULL)
{ r->data=t; t/=10;
s=(suct number *)malloc(sizeof(num));
s->data=t; s->next=NULL;
r->next=s; r=s;
t/=10;
while(t>0)
{ s=(suct number *)malloc(sizeof(num));
s->data=t; s->next=NULL;
r->next=s; r=s;
t/=10;
}
}
r=r->next;
}
p=head->next;
while(p!=NULL)
{
t=p->data;
if(t>9)
{
p->data=t;
t/=10;
p=p->next; /*注意和的[··]关系*/
p->data =t;
if(p->data>9)
{ flag=p->data;
p->data=flag;
flag/=10;
p->next->data =flag; /*连续进两位以上*/
}
}
while(t>9&&p->next==NULL)
{ if(t>0)
{ p->data=t; t/=10;
s=(suct number *)malloc(sizeof(num));
s->data=t; s->next=NULL;
p->next=s; p=s;
t/=10;
}
}
p=p->next;
}
i ;
}
head=head->next; /*[··]*/
return head;
}
void disp(suct number *head) /*输处联表*/
{ while(head!=NULL)
{ printf("%d",head->data);
head=head->next;
}
printf("\n");
}
suct number *move(suct number *h) /*链表倒置*/
{ suct number *p,*q,*r=h;
q=h->next;p=h;
while(q!=NULL)
{ r=q->next; q->next=p;
p=q; q=r;
}
h->next=NULL;
h=p;
return(h);
}
main()
{ int d;
suct number *h,*p;
printf("Please input the N! number :");
scanf("%d",&d);
if(d==0)
{ printf("\nThe Result is : %d\n",d 1);
return 0;
}
h=create(d);
h=move(h);
printf("\nThe Result is : ");
disp(h);
printf("\n");
}

来源:十度教育
作者:
关键字:求解
发表日期:2006-6-24 20:34:33

网页显示有限 阅读全文请下载本文完整版WORD文档

上一篇:日历表的显示   下一篇:一个图书馆管理程序


2008-11-23 20:04:12
本文的相类似文章
  • 夏庄模式:“普九”困境下的发展求解
  • 支招考试:高考理科综合试题求解策略
  • 2003年高考复习第四节利用整体法和隔离法求解平衡问题
  • 变力做功求解方法归类例析
  • 气体压强的分析与求解
  • 气体压强的分析与求解
  • 浅谈高中物理极值问题的求解方法
  • 动量和能量综合题的求解
  • 求解碰撞速度问题的三种方法
  • 求解解析几何中参数范围的一种基本思路
  • 在学习中进步 在进步中成长 教程中国相随您的成长之路
    华腾联合科技股份有限公司版权所有
    广告联系:Rosibo@163.com