[NOJ]数据结构实验1.2 高精度计算 PI 值

[NOJ]数据结构实验1.2 高精度计算 PI 值

在这里插入图片描述
在这里插入图片描述

算法

在这里插入图片描述
在这里插入图片描述

#include<iostream>
using namespace std;
typedef struct node
{
	int data;
	struct node *next,*pre;
}node,*Linklist;

void In(Linklist L);
void Sum(Linklist a,Linklist b);
void Mul(Linklist a,int m);
void Div(Linklist a,int m);

int main()
{
	int n,i,top,bottom,k=1;
	cin>>n;
	Linklist sum,R;
	sum=new node;
	R=new node;
	In(sum);
	In(R);
	sum->next->data=3;
	R->next->data=3;
	while(k<2000)
	{
		top=(2*k-1)*(2*k-1);
		bottom=8*k*(2*k+1);
		Mul(R,top);
		Div(R,bottom);
		Sum(R,sum);
		k++;
	}
	if(n==0) cout<<"3"<<endl;
	else
	{
		sum=sum->next;
		cout<<"3.";
		for(i=0;i<n;i++)
		{
			cout<<sum->next->data;
			sum=sum->next;
		}
	}
	cout<<endl;
	return 0;
}

void In(Linklist L)   //链表初始化
{
	Linklist p=L,q;
	L->next=L;
	L->pre=L;
	int i;
	for(i=0;i<1000;i++)
	{
		q=new node;
		q->data=0;
		q->next=L;
		q->pre=p;
		p->next=q;
		L->pre=q;
		p=q;
	}
}

void Sum(Linklist a,Linklist b)    //加法实现
{
	Linklist p=a->pre,q=b->pre;
	int x;
	while(q!=b)
	{
		x=q->data+p->data;
		q->data=x%10;
		q->pre->data+=x/10;
		q=q->pre;
		p=p->pre; 
	}
}

void Mul(Linklist a,int m)   //乘法实现
{
	Linklist p=a->pre;  
    int x,y=0;  
    for(; p!=a; p=p->pre)  
    {  
        x=(p->data)*m+y;  
        y=x/10;  
        p->data=x%10;  
    }  
    x=(p->data)*m+y;  
    y=x/10;  
    p->data=x%10; 
}

void Div(Linklist a,int m)  //除法实现
{
	Linklist p=a->next;  
    int x,y=0;  
    for(; p!=a; p=p->next)  
    {  
        x=p->data+y*10;  
        p->data=x/m;  
        y=x%m;  
    }
}
 
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值