第一范文网 - 专业文章范例文档资料分享平台

数据结构与算法专题实验报告 - 图文

来源:用户分享 时间:2025/5/22 21:18:21 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

for(j=n+2;j

fprintf(fpt,\ }

fclose(fpt); }

返回

第2题 大数阶乘

1 题目:

求N!(N>10)

2 目标:

1. 掌握大数的处理方法

2. 编程实现时应该考虑边界条件的处理。

3 设计思想:

1. 为实现大数阶乘,我们来看下面的分析:

0!=1;1!=1; 2!=1+1;(1!加2次) 3!=2+2+2;(2!加3次) 4!=6+6+6+6;(3!加4次)

n!=(n-1)!+(n-1)!+(n-1)!+??+(n-1)!+(n-1)!( (n-1)!加n次)

算n!要先算(n-1)!,然后再把它相加n次,可以用类似竖式加法实现。

a[MAX]??a[3] a[2] a[1] a[0] + a[MAX]??b[3] b[2] b[1] b[0]

a[MAX]??a[3] a[2] a[1] a[0]

2. 还要考虑边界条件,负数无法求阶乘,太大的数求阶乘太耗时间,故确定范围[0,NUM],在此范围内程序继续执行,超出这个范围,则返回重新输入。

3. 对一个数来说最高位不可能为0,设置从a[MAXnumber]开始扫

描,遇到第一个不为0的数位时开始输出。

4 算法描述:

step1:定义数组的最大位数,定义存放最后结果和分布结果的

数组a和b;

step2: 输入并判断,符合,则继续,不符合,返回重新输入; step3: while(0

a.初始化两个数组,a[0]=1,,输入所要求阶乘的那个数n; b.for语句(j

step4:输出 ,从a数组的最后一个元素向前扫描,遇到第一个不

为0的数字开始输出。

5 程序流程图:

6 源程序:

#include

#define MAXnumber 3000 //定义数组的最大长度 void main( )

{ int a[MAXnumber],b[MAXnumber]; //定义存放结果的数组 int i,j,m,k,r,n;

char ch='y'; while(ch!='n')

{ cout<<\请输入你所想求阶乘的那个数:\ cin>>n;

if(n>1000) //设置大数的边界条件,大数求阶乘比

较慢

{

cout<<\你所输入的数字太大,请重新输入!\

cin>>n;

}

while(n<0) //设置边界条件,负数无法求阶乘

{ cout<<\对不起,输入错误,请重新输入!\

cin>>n; }

for(i=1;i

{ for(i=0;i

b[i]=a[i]; for(m=1;m

for(i=0;i

{ r=a[i]+b[i];

if(r>9) a[i+1]++; a[i]=r;

} }

k=MAXnumber-1; // 从数组末一个元素开始扫描,当遇到第一个不为0 的元素时开始输出

搜索更多关于: 数据结构与算法专题实验报告 - 图文 的文档
数据结构与算法专题实验报告 - 图文.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c8svty0vdbb0a0pl1tz16_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top