hdu 6217 BBP Formula

本文介绍了一种计算圆周率π在十六进制下指定位置数字的方法,使用BBP公式并结合快速模幂算法实现高效计算。通过具体代码示例展示了如何获取π值小数点后任意位数的精确值。
部署运行你感兴趣的模型镜像

题目链接

求PI的十六进制表示的小数点后第n位是多少,看其他博主说要求第n位,只需要把16进制下的小数点挪到第n-1位和第n位之间,即*16^(n-1),然后去掉整数部分,小数部分再乘16得到的整数部分即是第n位

公式分解详解https://blog.youkuaiyun.com/meopass/article/details/78327614

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;

char change(int ans){
  if(ans>=0&&ans<=9)
    return ans+'0';
  return ans+55;  //十六进制转换
}

ll quick_pow(ll a,ll b,ll mod){  //快速模幂
  ll ans=1;
  while(b){
    if(b&1)
      ans=ans*a%mod;
      b>>=1;
      a=a*a%mod;
  }
  return ans;
}

double bbp(int n,ll k,ll b){  //bbp公式
  double res=0;
  for(int i=0;i<=n;i++){
    res+=(quick_pow(16,n-i,8*i+b)*1.0/(8*i+b));  //保证高精度
  }
  for(int i=n+1;i<=n+1+1000;i++){
    res+=(pow(16,n-i)*1.0/(8*i+b));  //直接求幂 
  }
  return k*res;
}

int main(){
  int t,n,cnt;
  cnt=0;
  scanf("%d",&t);
    while(t--){
      cnt++;
      scanf("%d",&n);
      n--;
      double ans=0;
	  ans=bbp(n,4,1)-bbp(n,2,4)-bbp(n,1,5)-bbp(n,1,6);  //小数部分
      ans=ans-int(ans);
      if(ans<0)
        ans+=1;
      ans*=16;  //整数部分
      char result=change(ans);
      printf("Case #%d: %d %c\n",cnt,n+1,result);
    }
  
  return 0;
}

 

您可能感兴趣的与本文相关的镜像

Qwen-Image

Qwen-Image

图片生成
Qwen

Qwen-Image是阿里云通义千问团队于2025年8月发布的亿参数图像生成基础模型,其最大亮点是强大的复杂文本渲染和精确图像编辑能力,能够生成包含多行、段落级中英文文本的高保真图像

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值