设计程序,实现高精度圆周率的计算和存储,使用线性表突破程序设计语言内置变量的数值和有效数字范围限制

一、使用线性表突破程序设计语言内置变量的数值和有效数字范围的限制,为了实现高精度圆周率的计算,先根据数学公式进行对PI高精度运算,如图1-1。根据这个数学公式 π2 = 0nn!2n+1‼ 即 Rn+1=Rn*n2n+1R1=1sum= π=2* n=1Rn 来计算PI值。首先先建立双链表,再对其初始化。根据其特性,实现了对大数的加法,乘法和除法,以此来完成对PI的高精度计算如图1-1,最后将PI的值储存到文件中如图1-2。

#include <stdio.h>
#include <stdlib.h>// 定义双链表节点结构体
typedef struct list
{int data;               // 节点数据域struct list *next;     // 指向下一个节点的指针struct list *pre;      // 指向前一个节点的指针
}list;// 初始化双链表,返回链表头节点
list* Initlist()
{list *head;head = (list*)malloc(sizeof(list)); // 为头节点分配内存if (!head)exit(EXIT_FAILURE); // 如果内存分配失败,则退出程序elsehead->next = head->pre = head; // 初始化头节点的next和pre指针指向自己return head;
}// 创建指定长度的双链表,返回链表头节点
list *Creatlist(list *head)
{list *p = head;for (int i = 0; i < 1000; i++) // 循环创建1000个节点{list *q = (list*)malloc(sizeof(list));if (!q)exit(EXIT_FAILURE); // 如果内存分配失败,则退出程序else{q->data = 0; // 将新节点q的数据域设置为0q->pre = p;  // 将新节点q的前置指针指向当前节点pp->next = q; // 将当前节点p的下一个节点指针指向新节点qq->next = head; // 将新节点q的下一个节点指针指向链表的头节点head,形成一个环形链表head->pre = q; // 将头节点head的前置指针指向新节点q,完成环形链表的构建p = p->next; // 将当前节点p移动到下一个节点,为下一次循环做准备}}return head;
}void Save(int n) //存储PI
{FILE *fp = fopen("E:\\C语言的软件\\数据结构与算法\\1\\PI的存储.txt","w+");fprintf(fp,"%d",n);fclose(fp);
}int main()
{int n;printf("请输入PI要精确到的位数\n");scanf("%d", &n); // 输入需要的小数位数list *number, *sum;list *p, *q, *x;number = Initlist(); // 初始化number链表sum = Initlist();    // 初始化sum链表number = Creatlist(number); // 创建number链表sum = Creatlist(sum);       // 创建sum链表number->next->data = 2; // number链表的第二位储存2,即2*R(1)=2sum->next->data = 2;   // sum链表的第二位也储存2int a = 0, b = 0; // 分别是用来暂时存储进位和余数for (int i = 1; i < 2000; i++) // 循环两千次,用于计算π的近似值{p = number->pre; // 开始大数乘法时从number链表的尾部开始while (p != number) //大于10则把10位的数字给b,个位数字放入data域中。{   //乘法运算a = p->data * i + b; // 计算当前位乘以i加上之前的进位p->data = a % 10; // 取个位数放入当前节点的data域b = a / 10; // 计算进位p = p->pre;  // 移动到前一个节点}b = 0; // 清空b,为除法做准备p = number->next; // 开始大数除法时从number链表的前部开始while (p != number) //若计算出的数字为自然数,则直接放入data域;若等于0,或为小数,则要计算余数并给b。{   //除法运算a = p->data + b * 10; // 计算当前位加上之前的余数乘以10p->data = a / (2 * i + 1); // 计算当前位的商,并放入当前节点的data域b = a % (2 * i + 1); // 计算余数p = p->next; // 移动到下一个节点}b = 0; // 清零bp = number->pre; // 开始大数加法时从number链表的尾部开始q = sum->pre;  // 从sum链表的尾部开始while (p != number) //大于10进位,并储存个位数,进位数字赋给b。{   // 加法计算a = p->data + q->data + b; // 计算当前位的和加上之前的进位q->data = a % 10; // 取个位数放入sum链表的当前节点的data域b = a / 10; // 计算进位p = p->pre; // 移动到number链表的前一个节点q = q->pre; // 移动到sum链表的前一个节点}}printf("3."); // 输出π的前缀"3."x = sum->next->next; // 从sum链表的第三个节点开始输出,即输出π的小数部分FILE *fp = fopen("E:\\C语言的软件\\数据结构与算法\\1\\PI的存储.txt","w+");fprintf(fp,"3.");for (int i = 0; i < n; i++) // 输出n位小数{fprintf(fp,"%d",x->data); //存储PIprintf("%d", x->data); // 输出当前节点的data域的值x = x->next; // 移动到下一个节点}fclose(fp);return 0;
}

图1-1 实现PI的高精度的计算

图1-2 高精度PI的存储

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/30702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis学习|Redis基础知识、Redis五大数据类型、Redis三种特殊数据类型、Redis事务

Redis基础知识 redis默认有16个数据库&#xff0c;并且这个数量可以在conf配置文件中更改 默认使用的是第0个 可以使用 select 进行切换数据库! key *查看数据库所有的key 清除当前数据库 flushdb 清除全部数据库的内容FLUSHALL 为什么redis是6379!(了解一下即可!) Redis 是…

【算法】Graham 凸包扫描算法 ( 凸包概念 | 常用的凸包算法 | 角排序 | 叉积 | Python 代码示例 )

文章目录 一、Graham 凸包扫描算法1、凸包概念2、常用的凸包算法3、Graham 凸包扫描算法 二、Graham 算法前置知识点1、角排序2、叉积3、算法过程分析 三、代码示例1、完整代码示例2、执行结果 使用 Graham 算法绘制的凸包效果 : 博客代码下载 : https://download.csdn.net/d…

大模型之-Seq2Seq介绍

大模型之-Seq2Seq介绍 1. Seq2Seq 模型概述 Seq2Seq&#xff08;Sequence to Sequence&#xff09;模型是一种用于处理序列数据的深度学习模型&#xff0c;常用于机器翻译、文本摘要和对话系统等任务。它的核心思想是将一个输入序列转换成一个输出序列。 Seq2Seq模型由两个主…

企业微信,机器人定时提醒

场景&#xff1a; 每天定时发送文字&#xff0c;提醒群成员事情&#xff0c;可以用机器人代替 人工提醒。 1&#xff09;在企业微信&#xff0c;创建机器人 2&#xff09;在腾讯轻联&#xff0c;创建流程&#xff0c;选择定时任务&#xff0c;执行操作&#xff08;企业微信机…

未登录也能知道你是谁?浏览器指纹了解一下!

引言 大多数人都遇到过这种场景&#xff0c;我在某个网站上浏览过的信息&#xff0c;但我并未登录&#xff0c;可是到了另一个网站发现被推送了类似的广告&#xff0c;这是为什么呢&#xff1f; 本文将介绍一种浏览器指纹的概念&#xff0c;以及如何利用它来判断浏览者身份。…

FIddler+Proxifer 实现PC客户端抓包详细教程

文章目录 前言1、Proxifer下载和配置1.1、下载Proxifer1.2、Proxifier配置 2、FIddler下载和配置2.1、FIddler下载2.2、FIddler配置 3、三、为什么抓不到有些应用程序的HTTP(s)的包&#xff1f; 前言 一般在浏览器场景下&#xff0c;我们可以利用Fiddler很好的完成抓包&#x…

计算机网络学习3

文章目录 以太网的MAC帧格式虚拟局域网VLAN概述虚拟局域网VLAN的实现机制以太网的发展802.11无线局域网的组成无线局域网的物理层无线局域网的数据链路层---使用CSMA/CD协议802.11无线局域网的MAC帧 网络层网络层概述网际协议IP和4.2.1异构网络互联IPv4地址及其编址方法概述IPv…

webpack处理样式资源04--webpack入门学习

处理样式资源 本章节学习使用 Webpack 如何处理 Css、Less、Sass、Scss、Styl 样式资源 介绍 Webpack 本身是不能识别样式资源的&#xff0c;所以我们需要借助 Loader 来帮助 Webpack 解析样式资源 我们找 Loader 都应该去官方文档中找到对应的 Loader&#xff0c;然后使用…

osgearth提示“simple.earth: file not handled”

在用vcpkg编译完osg和osgearth后&#xff0c;为了验证osgearth编译是否正确&#xff0c;进行测试&#xff0c;模型加载代码如下&#xff1a; root->addChild(osgDB::readNodeFile("simple.earth")); 此时以为是simple.earth路径的问题&#xff0c;遂改为以下代码…

Kithara实时定时器

管理定时器和实时定时器 目录 管理定时器和实时定时器管理时间数据通用定时器编程初始化计时器删除计时器停止/启动/调整定时器备注RealTimer 备注项目实例项目结构项目源码 示例更多&#xff1a; 管理时间数据 在 Kithara RealTime Suite 中&#xff0c;所有时间值均以 100 ns…

Pikachu靶场--文件上传

参考借鉴 Pikachu靶场之文件上传漏洞详解_皮卡丘文件上传漏洞-CSDN博客 文件上传漏洞&#xff1a;pikachu靶场中的文件上传漏洞通关_pikachu文件上传通关-CSDN博客 client check 在桌面新建一个文件夹&#xff0c;准备一个hello.php文件&#xff0c;文件写入如下代码 <?p…

产品3D模型在线展示

产品3D模型可以向潜在客户提供360度的观察角度&#xff0c;比平面图形的效果更好。快速实现产品3D模型的在线展示最简单的方法是使用老子云3D可视老子云3D可视化的模型内嵌特性&#xff0c;无需任何开发工作&#xff0c;5分钟就可以完成&#xff1a; 老子云的模型内嵌功能&…

[YOLOv10:注意力机制的轻量化创新,MLCA在目标检测中的卓越表现]

本文改进:一种轻量级的Mixed Local Channel Attention (MLCA)模块,该模块考虑通道信息和空间信息,并结合局部信息和全局信息以提高网络的表达效果。 1.YOLOv10介绍 论文:[https://arxiv.org/pdf/2405.14458] 代码: https://gitcode.com/THU-MIG/yolov10?utm_source=csdn…

二叉树的基础讲解

二叉树在遍历&#xff0c;查找&#xff0c;增删的效率上面都很高&#xff0c;是数据结构中很重要的&#xff0c;下面我们来基础的认识一下。(高级的本人还没学&#xff0c;下面的代码用伪代码或C语言写的)我会从树&#xff0c;树的一些专有名词&#xff0c;树的遍历&#xff0c…

ROM以及ROM与RAM对比

1.ROM ROM最原始的定义是“只读存储器”&#xff0c;一旦写入原始信息则不能更改。所以ROM通常用来存放固定不变的程序、常数和汉字字库&#xff0c;甚至用于操作系统的固化。它与随机存储器可共同作为主存的一部分&#xff0c;统一构成主存的地址域。 现在已经发展出了很多R…

《模拟联合国2.9—团队协作》

感谢上海财经大学持续的邀请&#xff0c;今天在阶梯教室举办的《模拟联合国2.0—团队协作》沙盘课程圆满结束。尽管场地的限制带来了一定的挑战&#xff0c;但得益于系统思考中“结构影响行为”的原则&#xff0c;我得以在不同场景中巧妙设计课程结构&#xff0c;极大地促进了大…

云顶森林的新守护者:大数据平台的智慧力量

在遥远的云顶之上&#xff0c;有一片生机盎然的森林&#xff0c;它不仅是动植物的家园&#xff0c;更是自然与人类和谐共生的典范。然而&#xff0c;如何在这片广袤的森林中实施高效、科学的管理&#xff0c;一直是一个摆在管理者面前的难题。幸运的是&#xff0c;随着科技的飞…

jQuery 样式操作

3.tab栏切换案例 实现效果&#xff1a; 案例分析&#xff1a; 核心代码&#xff1a; html结构&#xff1a; 4.jQuery类操作与className区别 1.操作css方法 jQuery可以使用Css方法来修改简单元素样式;可以操作类,修改多个样式。 参数只写属性名&#xff0c;则是返回属性值…

WordPress插件数据库批量替换内容工具插件

1、安装插件后&#xff0c;我们就可以在后台菜单看到工具操作界面 2、目前支持网站内容、标题、评论指定字符的快速替换 3、可以快速解决以往我们需要从MYSQL数据库命令替换的烦恼

DNF安卓分离仅是开始:游戏厂商积极布局自有渠道,市场变革在即

毫无征兆&#xff0c;DNF手游今天突然宣布从各大安卓平台下架。 《地下城与勇士:起源》运营团队于6月19日发布声明&#xff0c;指出因合约到期&#xff0c;游戏将不再上架部分安卓平台的应用商店。然而&#xff0c;这一事件并非完全无迹可循。 早在2021年初&#xff0c;华为游…