大整数阶乘程序设计_B09040121.docxVIP

  • 2
  • 0
  • 约1.06万字
  • 约 30页
  • 2020-09-13 发布于天津
  • 举报
程序设计报告 (2010 / 2011 学年 第一学期) 题 目: 大整数阶乘 专 业 计算机科学与技术 学 生 姓 名 张赛 班 级 学 号 指 导 教 师 杨涛 指 导 单 位 计算机学院 日 期 2010.9.30 项 分 评 秀 好 良 等 中 差 评 现 度 态 习 学 分 细 况 情 实 匕匕 厶冃 功 题 谍 性 R 二 理 合 则 告 报 简 短 评 语 名 年 师 教 月 日 ■- 评分等级 □ 备注 隼 中 良 大整数阶乘 课题内容和要求 1、系统的基本功能及要求 ( 1)写一个类 BigInteger ,并有如下成员函数 operator+/ operator-/ ,即整数的四则运算并重载运算符。 (2)用该大整数计算n的阶乘并显示出来。(n€ [1,100]) 注:为了简化,可不考虑负数,则遇上形如“ 2-4 ”这样的表达式需要报错 2、程序执行过程 (1 )系统从键盘读入自然数 n,直到输入了合法的 n为止。 (2)输出运算的结果, 为便于观察结果, 每输出四位中间插入空格, 格式如下 (例如, n=12): 12!= 4790 0160 0 (3)询问用户是否继续进行, 用户选择 “是”,直到输入合法为止, 转( 1 ) ,否则退出程序。 3、算法要求及提示 因为n较大时,n!的结果将超出长整形的保存范围,因此结果不能用 long int 型的变量来保存。本算法要求用链表来存储。 链表的每一个节点存储结果的一位数字,因此结果的输出实际上是链表的 遍历问题,同时要先考虑用多少位来表示大整数。 4、其他要求 ( 1)输入时具备一定的容错性判断,如输入的不是数字,或输入的数超过范围 等等。 ( 2)变量、函数命名符合规范。 ( 3)注释详细:每个变量都要求有注释说明用途;函数有注释说明功能,对参 数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释。 (4)程序的层次清晰,可读性强。 二、 需求分析 1)课题要求已说明结果不能用 long int 型的变量来保存,要求用链表来存储。 ,首先要定义一个节点类,在这里定义一个双向节点类。 2)定义一个 BigInteger 大整数类,使其能够存放大数阶乘,并实现其的四则运算。 3)对输入整数的合法性进行检查,必须考虑用户各种输入情况。 三.概要设计 1.使用单链表存储数据,结点类定义如下: class Node { int data; Node* next;// 指向大数的高位 Node* pre;// 指向大数的低位 friend class BigInteger; }; 使用大整数类来进行大整数四则算法的重载, 在主函数中通过定义大整数对象 调用,大整数类定义如下: class BigInteger// 定义大整数类 { public: Node *head,*head1; int n,temp,i,jinwei; 加法运算重载声明 减法运算重载声明 乘法运算重载声明 除法运算重载声明BigInteger();// 无参构造函数 ~BigInteger();// 析构函数 void jiecheng();// 阶乘函数 void operator +( BigInteger p1);// void operator -( BigInteger p1);// void operator *( BigInteger p1);// 加法运算重载声明 减法运算重载声明 乘法运算重载声明 除法运算重载声明 void operator /( BigInteger p1);// }; 算法设计说明: 因为n较大时,n!的结果将超出长整形的保存范围,因此结果不能用 long int 型的变量来保存。本算法数据用单链表来存储。 链表的每一个节点存储结果的一位数字, 因此结果的输出实际上是链表的遍历问 题,同时要先考虑用多少位来表示大整数。 首先申请一个结点类并赋数据域初值 1,然后遍历单链表逐个的数据域与 i (1 到n)相乘; 乘完后重新遍历,对每个结点的数据域处理,若小于 10 则跳过; 否则,判断下一结点是否存在,若存在则该数据域除 10 取余,下一结点的数据 域加上该数据域除 10 的结果,若不存在则申请新结点空间,处理同上; 全部乘完并处理完后, 遍历单链表并输出各自的数据域即可, 注意每四个输出一 个空格。 4、流程图 四?详细设计 1.阶乘函数作为Biglnteger类中的函数,在主函数通过定义大整数类对象调用, 阶乘函数的定义如下: void Big In teger::jieche ng() Node *cur,*cc; Node *head=new Node;//存放第一个节点,值为1 head-data=1; h

文档评论(0)

1亿VIP精品文档

相关文档