计算PI(π)小数点后n位,可以精确10000位及以上

此贴仅作为我学习计算机过程中留下的记录。。。

#include <iostream>
using namespace std;

#define ARRSIZE 5000

int x[ARRSIZE],y[ARRSIZE];



int chufa(int a,int b);


int main(){
    int High;
    
    cin>>High;

    int a = 1,b = 3;
    int c,d;
    x[0] = 2;
    y[0] = 2;
    for (int i = 0; i < ARRSIZE; i++)
    {
        //c = z*a;
        int t = 0;  //同时用t判断是否需要进位
        int num;
        for(int j = ARRSIZE-1;j>=1;j--){
            num = x[j]*a+t;
            x[j] = num%10;
            t = num/10;
        }
        x[0] = x[0]*a+t;
        int m,n;
        // z = z*a/b;
        // num = num+z;
        // a++;
        // b+=2;
        t = 0;
        for(int j = 0;j<ARRSIZE;j++)  //x[0]表示整数部分,x[0]以外表示小数部分,用x数组表示z*a/b
        {
            num = x[j]+t*10;
            x[j] = num/b;
            t = num%b;
        }

        //y[ARRSIZE]表示num = num+z;


        t = 0;
        
        for(int j = ARRSIZE-1;j>=1;j--)  
        {
            num = y[j] + x[j] + t;
            y[j] = num % 10;
            t = num/10;
        }

        y[0] = x[0]+y[0]+t;  //整数部分不需要模运算

        a++;
        b += 2;
    }

    cout<<y[0]<<".";

    for(int i = 1;i<High+1;i++)
    {
        cout<<y[i];
        // if (i%100 == 0)
        // {
        //     cout<<"\n";
        // }
        

    }
    cout<<"\n";
    

    system("pause");

    return 0;

}

 若想改变小数点后位数,只需要改变数组大小ARRSIZE即可,有什么可以改进的地方,可以在评论区讨论。感谢批评指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值