n(n≥20)的阶乘

基本要求

  • 数据的表示和存储:

    累积运算的中间结果和最终的计算结果的数据类型要求是整型——这是问题本身的要求。

    试设计合适的存储结构,要求每个元素或结点最多存储数据的3位数值。
  • 数据的操作及其实现:

    基于设计的存储结构实现乘法操作,要求从键盘上输入n值;在屏幕上显示最终计算结果
  • 从问题描述不难看出n值为任意值,故为使程序尽量不受限制,应采用动态存储结构

用单链表实现数据的动态存储

结构体类定义

struct LinkNode
{
int element;
LinkNode* next;
LinkNode() { this->next = NULL; this->element = 0; }
LinkNode(int element) { this->element = element; }
}; class Link
{
public:
Link() {};
~Link() {};
Link(int n);
void factorial();
void output();
private:
LinkNode * head;
int n; };

主要函数,配上核心代码,详细注释

//构造函数,
Link::Link(int n)
{
this->n = n;
head = new LinkNode();
head->element = 1;
}
//核心代码,一个节点保存三位
void Link::factorial()
{
int flag;
for (int i = 1; i <= n; ++i)//处理1~n的乘法
{
LinkNode* current = head;
flag = 0;//初始化
while (current != NULL)
{
current->element = i * (current->element) + flag;//当前的值*i 加低位的进位
//如何当前值大于1000,即需要进位,如果当前的current->next == NULL,说明需要拓展节点
if (current->element >= 1000 && current->next == NULL)
{
current->next = new LinkNode();
}
//flag作为上一位进位的数值
flag = current->element / 1000;
//当前的值处理一下,保证小于1000
current->element = current->element % 1000;
//下一个节点
current = current->next;
}
}
}
//输出函数,调用print(headNode)
void Link::output()
{
print(head);
}
//递归实现输出,逆序输出,实现正常的数据顺序
void print(LinkNode * node)
{
if (node != NULL) {
print(node->next);
if (node->next == NULL)//如果是第一位,直接输入保存的数据
printf("%d", node->element);
//因为后面保存的数据可以为000,所以格式控制输出
else printf("%03d", node->element);
}
return;
}

结束啦!!!

思路写法主要来自大佬Chunibyo,大佬tql。

单链表实现n(n≥20)的阶乘的更多相关文章

  1. PTA之求单链表结点的阶乘和

    本题要求实现一个函数,求单链表L结点的阶乘和.这里默认所有结点的值非负,且题目保证结果在int范围内. 时间限制: 400ms 内存限制: 64MB 代码长度限制: 16KB 函数接口定义: int ...

  2. PTA基础编程题目集6-6求单链表结点的阶乘和(函数题)

    本题要求实现一个函数,求单链表L结点的阶乘和.这里默认所有结点的值非负,且题目保证结果在int范围内. 函数接口定义: int FactorialSum( List L ); 其中单链表List的定义 ...

  3. 数据结构C语言实现系列——线性表(线性表链接存储(单链表))

    #include <stdio.h>#include <stdlib.h>#define NN 12#define MM 20typedef int elemType ;/** ...

  4. 数组、单链表和双链表介绍 以及 双向链表的C/C++/Java实现

    概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现. ...

  5. 63.如何对单链表进行快排?和数组快排的分析与对比[quicksort of array and linked list]

    [本文链接] http://www.cnblogs.com/hellogiser/p/quick-sort-of-array-and-linked-list.html [题目] 单链表的特点是:单向. ...

  6. 用java简单的实现单链表的基本操作

    package com.tyxh.link; //节点类 public class Node { protected Node next; //指针域 protected int data;//数据域 ...

  7. Java: 实现顺序表和单链表的快速排序

    快速排序 快速排序原理 快速排序(Quick Sort)的基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可对这两部分记录继续进行排序,以达到 ...

  8. 008实现一个算法从一个单链表中返回倒数第n个元素(keep it up)

    我们维护两个指针, 它们之间的距离为n. 然后.我将这两个指针同步地在这个单链表上移动,保持它们的距离 为n不变. 那么, 当第二个指针指到空时.第一个指针即为所求. #include <ios ...

  9. "《算法导论》之‘线性表’":基于指针实现的单链表

    对于单链表的介绍部分参考自博文数组.单链表和双链表介绍 以及 双向链表的C/C++/Java实现. 1. 单链表介绍 单向链表(单链表)是链表的一种,它由节点组成,每个节点都包含下一个节点的指针.   ...

随机推荐

  1. WEB前端工程师的职业发展路线图、怎样做WEB前端职业规划

    20151028整理 —————————— 知乎-Web前端的路该怎么走?(2015年发表) 在规模越大的团队,工作划分得越细腻,专注的点就越深,但同时就可能会被限制在某个狭窄点上,成为某个角落的技术 ...

  2. MVC 打印解决方案--SNF快速开发平台3.1

    SNF-MVC打印报表方案: 报表模块创建的过程如下: 利用Stimulsoft Reports客户端报表工具新增一个报表文件 *.mrt 当然你也可以拿好用的*.mrt模版文件进行复制出来一个,我常 ...

  3. GDB 调试器使用手冊

    使用GDB: 本文描写叙述GDB,GNU的原代码调试器. (这是4.12版1994年一月.GDB版本号4.16) * 文件夹: * 摘要: GDB的摘要 * 实例: 一个使用实例 * 入门: 进入和退 ...

  4. HTML5学习笔记(二十八):跨域

    在跨域安全性方面,有多个地方会有限制,主要是XMLHttpRequest对象的跨域限制和iFrame的跨域限制,下面我们分别来看一下. Ajax跨域(CORS) CORS是一个W3C标准,全称是&qu ...

  5. Asp.Net 简繁转换

    帮助类 /// <summary> /// 中文字符工具类 /// </summary> public static class ChineseStringUtility { ...

  6. Django项目实战 - html中用户登录判断

    实现逻辑: {% if request.user.is_authenticated %} 个人信息{% else %}登录{% endif %} 直接上代码 {% if request.user.is ...

  7. 小patch(psu)的打法 -- 实例

      从patch中的readme来. bug:10214450     测试数据:   SQL> create table t (t timestamp); Table created. SQL ...

  8. Android Launcher分析和修改8——AllAPP界面拖拽元素(PagedViewWithDraggableItems)

    接着上一篇文章,继续分析AllAPP列表界面.上一篇文章分析了所有应用列表的界面构成以及如何通过配置文件修改属性.今天主要是分析PagedViewWithDraggableItems类,因为在我们分析 ...

  9. Foxpro数据库连接错误解决方法--【VFP DBF文件不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器】

    直接访问vfp dbf文件时报错: 错误描述: 'd:\vfpData\test.dbf'不是一个有效的路径. 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器. 解决办法:Data Sour ...

  10. vector、map 内存释放

    一.vector void TestVector() { cout << "begin create vector" << endl; int iSize ...