计算N!的程序(0~65535)

来源:百度知道 编辑:UC知道 时间:2024/06/02 13:54:57
用C语言或是 C++编程都行!

实习报告
题目:N(N>20)的阶乘 实习时间:2007.6 实习者:08605218 王顺云

1.需求分析:
(1)用户输入0~65535间任意大小的数N,用链表存储N!的计算结果。
(2)计算完成后输出计算的结果。
(3)程序以人机对话的方式输出;
(4)测试数据:N=20,N!=243290200817664000;
N=30,N!=265252859812191058636308480000000。

2.设计
2.1设计思路
存储结构
采用双向链表存储计算的结果,每个结点中存储1位十进制数,结点的结构如下:

定义如下:
typedef long int datatype;
typedef struct dlno
{
datatype data;
struct dlno *next,*pre;
}dlnotype;
主要算法的基本思想
①乘数n与被乘数中的最后一位数r->data相乘,相乘的结果再加上进位flag,然后将结果赋予临时结果变量t。
②将t中的个位数存储到r->data中,如果将t的十位和更高位存储到flag中作为下一次计算的进位。
③判断r的前一位是否存在,如果不存在即不为NULL,说明已经计算完毕,需要进行剩余进位的处理;如果存在即为NULL,说明还没有计算完毕,则将r的指针指向r的前一位,然后重复①~③步,直到r的前一位位空。
④处理剩余的进位。
⑴首先判断此时的进位是否为零,如果为零,说明不需要进行处理;如果进位不
为零,说明有进位需要处理,那么:
⑵申请一个结点空间,将该结点插入到结果链表r中,将flag的个位数存储到新
插入的结点中。
⑶将进位flag中的十位和更高位存储到f