#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
typedef struct NODE{int n;int power;struct NODE* pre;struct NODE* next;
}NODE;void PiCreateAndInitial(NODE* head,int m) {
//创建双向循环链表,并且初始化链表 int tempx=m;NODE* temp = head;for (;m>=0;m--){NODE* p = (NODE*)malloc(sizeof(NODE));if (p) {if(m==tempx){p->n=1;}else{p->n=0;}p->power=m-tempx;temp->next = p;p->pre=temp;temp = p;}}temp->next=head;head->pre=temp;
}void PiOutput(NODE* head,int m) {
//链表的遍历 char s[520]={0};char *sp=s;NODE* p = head->next;while ((m--)>=0) {*sp=(p->n)+48;sp=sp+1;if((p->power)==0){*sp='.';sp=sp+1;}p = p->next;}printf("%s\n",s);
}void PiMultiply(NODE* head,int n){
//大数乘一个整数 int Cin=0;NODE* p=head->pre;while(p!=head){p->n=(p->n)*n+Cin;Cin=(p->n)/10;p->n=(p->n)%10;p=p->pre;}
}void PiDivide(NODE* head,int n){
//大数除一个整数 int temp=0;NODE* p=head->next;while(p!=head){temp=(p->n)%n;p->n=(p->n)/n;(p->next)->n=(p->next)->n+10*temp;p=p->next;}
}void PiAdd(NODE* head1,NODE* head2){
//把累加的结果保存下来 NODE* p1=head1->pre;NODE* p2=head2->pre;int Cin=0;while(p1!=head1){p2->n=(p2->n)+(p1->n)+Cin;Cin=(p2->n)/10;p2->n=(p2->n)%10;p1=p1->pre;p2=p2->pre;}
}
int main(){int m;scanf("%d",&m);//完成题目的唯一输入要求 NODE* head1=(NODE*)malloc(sizeof(NODE));NODE* head2=(NODE*)malloc(sizeof(NODE));head1->next=head1->pre=NULL;head2->next=head2->pre=NULL;if(head1&&head2){PiCreateAndInitial(head1,750);PiCreateAndInitial(head2,750);for(int n=1;n<=5000;n++){int temp=2*n+1;PiDivide(head1,temp);PiMultiply(head1,n);PiAdd(head1,head2);}PiMultiply(head2,2);PiOutput(head2,m);}return 0;
}

5
3.14159

--------------------------------
Process exited after 1.226 seconds with return value 0
请按任意键继续. . .

西工大NOJ数据结构实验——1.2高精度计算PI值相关推荐

  1. 数据结构实验1.2—高精度计算PI值(西工大)

    这是数据结构第二题的题目,是让我们根据用户的需求来计算派的值 这是题目的详细描述,刚看到这道题的时候,我是真的头大,完全没有思路,于是查找了一些大佬的笔记后才开始编写 这是我在写这些代码是所运用到的数 ...

  2. 西工大NOJ数据结构实验——1.1合并有序数组

    #include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct NODE{int n; ...

  3. 西工大NOJ数据结构实验——2.1稀疏矩阵转置

    对稀疏矩阵进行转置操作,按照老师讲的,有两种办法.我用的是第一种最简单的,从上到下一行一行得走,虽然速度很慢,但是简单. 说实话这个题目很讨厌,我们定义的三元组里面mu表示的是行数,但是题目要求输入的 ...

  4. 西工大NOJ数据结构实验——实验 2.4稀疏矩阵的乘法

    然后呢,对于这道题,有2点要注意: 1.在Sample Input和Sample Output中,所有的"?"都是因为格式问题,让空格转成了"?",所以我们在程 ...

  5. 西工大NOJ数据结构理论——013.以十字链表为存储结构实现矩阵相加(严5.27)

      我第一下拿到这个题目,第一反应就是先定义好数据结构,然后构建好十字链表基础操作的函数,也就是"创插遍历"这些操作.下面是我的定义和函数操作. typedef int ElemT ...

  6. 西工大NOJ数据结构理论——021.逆波兰表达式(严7.38)

    这道题我参考的是(80条消息) 『西工大-数据结构-NOJ』 021-逆波兰表达式(耿7.38) 『西北工业大学』__LanXiu的博客-CSDN博客 (准确来说是快期末考试了,所以各科老师都在疯 狂 ...

  7. 西工大NOJ数据结构理论——017.输出以二叉树表示的算术表达式(严6.51)

    (17条消息) 『西工大-数据结构-NOJ』 017-输出以二叉树表示的算术表达式(耿6.51) 『西北工业大学』__LanXiu的博客-CSDN博客 上面是我参考的一位学长的博客. 先序建立二叉树, ...

  8. 西工大NOJ数据结构理论——014.求广义表深度(严5.30)

    第一下拿到这道题,我的脑袋轰一下就大了.如果说用"括号匹配"来做的话,这其实很简单.但是如果要用广义表来做的话,难度哗哗哗的就涨上来了.为什么呢?首先,要把读入的字符串存到广义表里 ...

  9. 西工大NOJ数据结构理论——007.表达式括号与匹配(严3.19)

    害怕提交次数过多,然后不再跑代码,影响成绩,所以又重新创建了两个号来测这道题. 结果全都正确,但就是一直"WA",然后Debug了近5个小时才把"WA"改成&q ...

最新文章

  1. ARM-Linux与嵌入式开发
  2. 人生哲理名言六十六条
  3. java.lang.ClassNotFoundException
  4. JavaWeb的一些理解
  5. iptables做路由转发服务器经典案例
  6. Eclipse使用SVN
  7. 内存不能为读写的解决方法
  8. 如何使用ABAP code inspector找出所有在LOOP里访问database的操作
  9. [C++]有关深复制与copy constructor的一些问题与实例
  10. 牛客网 【每日一题】5月20日题目 简单瞎搞题
  11. 串口助手驱动_STM32Cube22(补充) | 使用硬件I2C驱动OLED(SSD1306)
  12. docker管理应用程序数据、容器网络
  13. POJ3494Largest Submatrix of All 1’s[单调栈]
  14. 苹果电脑 默认安装jdk位置_CH01_JDK安装和配置(含macOS)
  15. 【Python爬虫】花瓣网爬取美女图片
  16. java识别答题卡纸_识别复杂的答题卡的主要算法
  17. python 请在微信客户端打开链接-怎么转发微信聊天记录-我用 Python 破解了微信聊天记录,自动同步微信文章...
  18. 2019.08-2020.06计算机考研指导总结篇
  19. Web The7安装
  20. PLC控制系统检查与维护方法

热门文章

  1. 图像分割 - 分水岭算法
  2. 公众号认证提示法定代表人身份证号码,工商数据未更新怎么办?
  3. wordpress搜索优化_搜索WordPress的替换
  4. Facebook放言将成为下一代互联网平台
  5. MyRPCDemo netty+jdk动态代理+反射+序列化,反序列化手写rpc框架
  6. 建设一个官网企业网站需要多少成本?
  7. What's new in Swift 3
  8. CentOS7 升级到 CentOS8
  9. 秋天到南瓜俏 和胃润燥滋味好
  10. c语言scanf返回值被忽略,scanf返回值问题