zoukankan      html  css  js  c++  java
  • 单链表实现n(n≥20)的阶乘

    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。

    不疯魔不成活
  • 相关阅读:
    伴郎
    MySQL出现Waiting for table metadata lock的场景浅析
    相同name,取最小的id的值,mysql根据相同字段 更新其它字段
    Sequence contains no elements
    Check if List<Int32> values are consecutive
    comparison of truncate vs delete in mysql/sqlserver
    Are query string keys case sensitive?浏览器种输入url附带的参数是否区分大小写
    Understanding Action Filters (C#) 可以用来做权限检查
    糖果缤纷乐攻略
    DNGuard HVM Unpacker(3.71 trial support and x64 fixed)
  • 原文地址:https://www.cnblogs.com/gzr2018/p/9973013.html
Copyright © 2011-2022 走看看