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. Matlab如何连接Oracle数据库及基本操作

    语言和语法都是相通的,了解Oracle的连接和处理,对于其他的数据库也是类似的. 一 通过ODBC实现到oracle的连接 )控制面板->管理工具->ODBC数据源->在系统DSN中 ...

  2. 每日英语:Who Needs to Know How to Code

    Like many 10-year-olds, Nick Wald takes private lessons. His once-a-week tutor isn't helping him wit ...

  3. mac下使用apktool反编译

    Mac OS X: Download Mac wrapper script (Right click, Save Link As apktool) Download apktool-2 (find n ...

  4. 【Linux高级驱动】I2C驱动框架分析

    1.i2c-dev.c(i2c设备驱动组件层) 功能:1)给用户提供接口 i2c_dev_init  //入口函数 /*申请主设备号*/ register_chrdev(I2C_MAJOR(), &q ...

  5. BW中DSO的分类及应用

    1.DSO的分类,标准DSO(生成主数据标识.对于相同关键字段的值进行合并.可直接出具报表).写优化的DSO(不生成主数据标识.不合并相同关键字段的值.速度快可用于存储大容量数据).直接写入的DSO, ...

  6. php中static和self的区别

    在阅读一些框架的源码时发现了new static(),和new self(),甚是不解,后来查阅资料,才知道static采用了延迟绑定,能准确知道是父类还是子类的调用.这就是说static是个聪明的小 ...

  7. mercurial的几个易用性小技巧

    其实这两年,能够采用mercurial的项目我都尽量用,甚至有些上游是git的,或者需要托管到公司内gitlab上与别人协作的,我都装上hg-git.无它,只是因为mercurial易用性比git好得 ...

  8. 【iCore4 双核心板_ARM】例程十五:USB_CDC实验——高速数据传输

    实验方法: 1.安装USB CDC驱动,驱动安装方法参考例程包中安装方法文档. 2.将跳线冒跳至USB_OTG,通过Micro USB 线将iCore4 USB-OTG接口与电脑相连. 3.打开上位机 ...

  9. MSSQL 2012 修改所有表的架构Schame

    ALTER SCHEMA [dbo] TRANSFER [sq_szswdjd].COM_Category ); declare csr1 cursor for select 'Name' = nam ...

  10. WebMisSharp,WebMisCentral,企业框架正则表达式规则共享专版

    ElegantWM.WebUI/Application/common/src/Tools.js 欢迎大家贡献更多的正则验证规则,目前支持如下: /*************************** ...